1 1.10 riastrad /* $NetBSD: auvitekvar.h,v 1.10 2022/03/13 12:49:36 riastradh Exp $ */ 2 1.1 jmcneill 3 1.1 jmcneill /*- 4 1.1 jmcneill * Copyright (c) 2010 Jared D. McNeill <jmcneill (at) invisible.ca> 5 1.1 jmcneill * All rights reserved. 6 1.1 jmcneill * 7 1.1 jmcneill * Redistribution and use in source and binary forms, with or without 8 1.1 jmcneill * modification, are permitted provided that the following conditions 9 1.1 jmcneill * are met: 10 1.1 jmcneill * 1. Redistributions of source code must retain the above copyright 11 1.1 jmcneill * notice, this list of conditions and the following disclaimer. 12 1.1 jmcneill * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 jmcneill * notice, this list of conditions and the following disclaimer in the 14 1.1 jmcneill * documentation and/or other materials provided with the distribution. 15 1.1 jmcneill * 16 1.1 jmcneill * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17 1.1 jmcneill * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18 1.1 jmcneill * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 1.1 jmcneill * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20 1.1 jmcneill * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 1.1 jmcneill * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 1.1 jmcneill * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 1.1 jmcneill * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 1.1 jmcneill * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 1.1 jmcneill * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 1.1 jmcneill * POSSIBILITY OF SUCH DAMAGE. 27 1.1 jmcneill */ 28 1.1 jmcneill 29 1.1 jmcneill #ifndef _AUVITEKVAR_H 30 1.1 jmcneill #define _AUVITEKVAR_H 31 1.1 jmcneill 32 1.1 jmcneill #include <sys/mutex.h> 33 1.3 jmcneill #include <sys/condvar.h> 34 1.3 jmcneill #include <sys/kthread.h> 35 1.1 jmcneill 36 1.5 dyoung #include <dev/dtv/dtvif.h> 37 1.5 dyoung 38 1.1 jmcneill #include <dev/usb/usb.h> 39 1.1 jmcneill #include <dev/usb/usbdi.h> 40 1.1 jmcneill #include <dev/usb/usbdi_util.h> 41 1.1 jmcneill #include <dev/i2c/i2cvar.h> 42 1.1 jmcneill 43 1.1 jmcneill #include <dev/i2c/au8522var.h> 44 1.1 jmcneill #include <dev/i2c/xc5kvar.h> 45 1.1 jmcneill #include <dev/i2c/xc5kreg.h> 46 1.1 jmcneill 47 1.1 jmcneill struct auvitek_softc; 48 1.1 jmcneill 49 1.1 jmcneill enum auvitek_board { 50 1.2 jmcneill AUVITEK_BOARD_HVR_850, 51 1.1 jmcneill AUVITEK_BOARD_HVR_950Q, 52 1.1 jmcneill }; 53 1.1 jmcneill 54 1.3 jmcneill #define AUVITEK_NISOC_XFERS 16 55 1.3 jmcneill #define AUVITEK_NBULK_XFERS 1 56 1.1 jmcneill #define AUVITEK_XFER_ALTNO 5 57 1.3 jmcneill #define AUVITEK_BULK_BUFLEN 58658 /* BDA driver uses the same */ 58 1.1 jmcneill 59 1.1 jmcneill struct auvitek_isoc { 60 1.1 jmcneill struct auvitek_xfer *i_ax; 61 1.9 skrll struct usbd_xfer *i_xfer; 62 1.1 jmcneill uint8_t *i_buf; 63 1.1 jmcneill uint16_t *i_frlengths; 64 1.1 jmcneill }; 65 1.1 jmcneill 66 1.1 jmcneill struct auvitek_videobuf { 67 1.1 jmcneill uint8_t av_buf[720*480*2]; 68 1.1 jmcneill uint32_t av_el, av_eb; 69 1.1 jmcneill uint32_t av_ol, av_ob; 70 1.1 jmcneill uint32_t av_stride; 71 1.1 jmcneill }; 72 1.1 jmcneill 73 1.1 jmcneill struct auvitek_xfer { 74 1.1 jmcneill struct auvitek_softc *ax_sc; 75 1.1 jmcneill int ax_endpt; 76 1.1 jmcneill uint16_t ax_maxpktlen; 77 1.9 skrll struct usbd_pipe * ax_pipe; 78 1.3 jmcneill struct auvitek_isoc ax_i[AUVITEK_NISOC_XFERS]; 79 1.1 jmcneill uint32_t ax_nframes; 80 1.1 jmcneill uint32_t ax_uframe_len; 81 1.1 jmcneill uint8_t ax_frinfo; 82 1.1 jmcneill int ax_frno; 83 1.1 jmcneill struct auvitek_videobuf ax_av; 84 1.1 jmcneill }; 85 1.1 jmcneill 86 1.3 jmcneill struct auvitek_bulk_xfer { 87 1.3 jmcneill struct auvitek_softc *bx_sc; 88 1.9 skrll struct usbd_xfer *bx_xfer; 89 1.3 jmcneill uint8_t *bx_buffer; 90 1.3 jmcneill }; 91 1.3 jmcneill 92 1.3 jmcneill struct auvitek_bulk { 93 1.3 jmcneill struct auvitek_softc *ab_sc; 94 1.3 jmcneill int ab_endpt; 95 1.9 skrll struct usbd_pipe *ab_pipe; 96 1.3 jmcneill struct auvitek_bulk_xfer ab_bx[AUVITEK_NBULK_XFERS]; 97 1.3 jmcneill bool ab_running; 98 1.3 jmcneill }; 99 1.3 jmcneill 100 1.1 jmcneill struct auvitek_softc { 101 1.1 jmcneill device_t sc_dev; 102 1.6 jmcneill device_t sc_videodev, sc_dtvdev, sc_audiodev, sc_i2cdev; 103 1.1 jmcneill struct i2c_controller sc_i2c; 104 1.1 jmcneill kmutex_t sc_i2c_lock; 105 1.10 riastrad bool sc_i2c_attached; 106 1.1 jmcneill 107 1.9 skrll struct usbd_device *sc_udev; 108 1.1 jmcneill int sc_uport; 109 1.9 skrll struct usbd_interface *sc_isoc_iface; 110 1.9 skrll struct usbd_interface *sc_bulk_iface; 111 1.1 jmcneill 112 1.1 jmcneill char sc_running; 113 1.1 jmcneill char sc_dying; 114 1.1 jmcneill 115 1.1 jmcneill enum auvitek_board sc_board; 116 1.1 jmcneill const char *sc_descr; 117 1.1 jmcneill uint8_t sc_i2c_clkdiv; 118 1.1 jmcneill 119 1.1 jmcneill struct au8522 *sc_au8522; 120 1.1 jmcneill struct xc5k *sc_xc5k; 121 1.1 jmcneill kmutex_t sc_subdev_lock; 122 1.1 jmcneill 123 1.1 jmcneill unsigned int sc_ainput, sc_vinput; 124 1.1 jmcneill uint32_t sc_curfreq; 125 1.4 jmcneill void (*sc_dtvsubmitcb)(void *, 126 1.4 jmcneill const struct dtv_payload *); 127 1.4 jmcneill void *sc_dtvsubmitarg; 128 1.1 jmcneill 129 1.1 jmcneill struct auvitek_xfer sc_ax; 130 1.3 jmcneill struct auvitek_bulk sc_ab; 131 1.1 jmcneill 132 1.1 jmcneill char sc_businfo[32]; 133 1.1 jmcneill }; 134 1.1 jmcneill 135 1.1 jmcneill /* auvitek.c */ 136 1.1 jmcneill uint8_t auvitek_read_1(struct auvitek_softc *, uint16_t); 137 1.1 jmcneill void auvitek_write_1(struct auvitek_softc *, uint16_t, uint8_t); 138 1.7 jmcneill void auvitek_attach_tuner(device_t); 139 1.1 jmcneill 140 1.1 jmcneill /* auvitek_audio.c */ 141 1.1 jmcneill int auvitek_audio_attach(struct auvitek_softc *); 142 1.1 jmcneill int auvitek_audio_detach(struct auvitek_softc *, int); 143 1.1 jmcneill void auvitek_audio_childdet(struct auvitek_softc *, device_t); 144 1.1 jmcneill 145 1.1 jmcneill /* auvitek_board.c */ 146 1.1 jmcneill void auvitek_board_init(struct auvitek_softc *); 147 1.3 jmcneill int auvitek_board_tuner_reset(void *); 148 1.3 jmcneill unsigned int auvitek_board_get_if_frequency(struct auvitek_softc *); 149 1.1 jmcneill 150 1.1 jmcneill /* auvitek_i2c.c */ 151 1.1 jmcneill int auvitek_i2c_attach(struct auvitek_softc *); 152 1.1 jmcneill int auvitek_i2c_detach(struct auvitek_softc *, int); 153 1.6 jmcneill void auvitek_i2c_rescan(struct auvitek_softc *, const char *, const int *); 154 1.6 jmcneill void auvitek_i2c_childdet(struct auvitek_softc *, device_t); 155 1.1 jmcneill 156 1.1 jmcneill /* auvitek_video.c */ 157 1.1 jmcneill int auvitek_video_attach(struct auvitek_softc *); 158 1.1 jmcneill int auvitek_video_detach(struct auvitek_softc *, int); 159 1.4 jmcneill void auvitek_video_rescan(struct auvitek_softc *, const char *, const int *); 160 1.1 jmcneill void auvitek_video_childdet(struct auvitek_softc *, device_t); 161 1.1 jmcneill 162 1.3 jmcneill /* auvitek_dtv.c */ 163 1.3 jmcneill int auvitek_dtv_attach(struct auvitek_softc *); 164 1.3 jmcneill int auvitek_dtv_detach(struct auvitek_softc *, int); 165 1.4 jmcneill void auvitek_dtv_rescan(struct auvitek_softc *, const char *, const int *); 166 1.3 jmcneill void auvitek_dtv_childdet(struct auvitek_softc *, device_t); 167 1.3 jmcneill 168 1.1 jmcneill #endif /* !_AUVITEKVAR_H */ 169