xref: /freebsd/sys/dev/hdmi/dwc_hdmi.h (revision 95ee2897)
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