106785ff6SJared McNeill /*-
206785ff6SJared McNeill * Copyright (c) 2016 Jared McNeill <jmcneill@invisible.ca>
306785ff6SJared McNeill *
406785ff6SJared McNeill * Redistribution and use in source and binary forms, with or without
506785ff6SJared McNeill * modification, are permitted provided that the following conditions
606785ff6SJared McNeill * are met:
706785ff6SJared McNeill * 1. Redistributions of source code must retain the above copyright
806785ff6SJared McNeill * notice, this list of conditions and the following disclaimer.
906785ff6SJared McNeill * 2. Redistributions in binary form must reproduce the above copyright
1006785ff6SJared McNeill * notice, this list of conditions and the following disclaimer in the
1106785ff6SJared McNeill * documentation and/or other materials provided with the distribution.
1206785ff6SJared McNeill *
1306785ff6SJared McNeill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1406785ff6SJared McNeill * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1506785ff6SJared McNeill * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1606785ff6SJared McNeill * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1706785ff6SJared McNeill * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1806785ff6SJared McNeill * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
1906785ff6SJared McNeill * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2006785ff6SJared McNeill * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2106785ff6SJared McNeill * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2206785ff6SJared McNeill * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2306785ff6SJared McNeill * SUCH DAMAGE.
2406785ff6SJared McNeill */
2506785ff6SJared McNeill
2606785ff6SJared McNeill #ifndef __DWC_HDMI_H__
2706785ff6SJared McNeill #define __DWC_HDMI_H__
2806785ff6SJared McNeill
2906785ff6SJared McNeill struct dwc_hdmi_softc {
3006785ff6SJared McNeill device_t sc_dev;
3106785ff6SJared McNeill struct resource *sc_mem_res;
3206785ff6SJared McNeill int sc_mem_rid;
3306785ff6SJared McNeill uint32_t sc_reg_shift;
3406785ff6SJared McNeill device_t (*sc_get_i2c_dev)(device_t);
3506785ff6SJared McNeill
3606785ff6SJared McNeill uint8_t *sc_edid;
3706785ff6SJared McNeill uint8_t sc_edid_len;
3806785ff6SJared McNeill struct intr_config_hook sc_mode_hook;
3906785ff6SJared McNeill struct videomode sc_mode;
406443acaaSJared McNeill
416443acaaSJared McNeill struct edid_info sc_edid_info;
426443acaaSJared McNeill int sc_has_audio;
4306785ff6SJared McNeill };
4406785ff6SJared McNeill
4506785ff6SJared McNeill static inline uint8_t
RD1(struct dwc_hdmi_softc * sc,bus_size_t off)4606785ff6SJared McNeill RD1(struct dwc_hdmi_softc *sc, bus_size_t off)
4706785ff6SJared McNeill {
4806785ff6SJared McNeill return (bus_read_1(sc->sc_mem_res, off << sc->sc_reg_shift));
4906785ff6SJared McNeill }
5006785ff6SJared McNeill
5106785ff6SJared McNeill static inline void
WR1(struct dwc_hdmi_softc * sc,bus_size_t off,uint8_t val)5206785ff6SJared McNeill WR1(struct dwc_hdmi_softc *sc, bus_size_t off, uint8_t val)
5306785ff6SJared McNeill {
5406785ff6SJared McNeill bus_write_1(sc->sc_mem_res, off << sc->sc_reg_shift, val);
5506785ff6SJared McNeill }
5606785ff6SJared McNeill
5706785ff6SJared McNeill int dwc_hdmi_get_edid(device_t, uint8_t **, uint32_t *);
5806785ff6SJared McNeill int dwc_hdmi_set_videomode(device_t, const struct videomode *);
5906785ff6SJared McNeill int dwc_hdmi_init(device_t);
6006785ff6SJared McNeill
6106785ff6SJared McNeill #endif /* __DWC_HDMI_H__ */
62