staticvoid hvr950q_cs5340_audio(void *priv, int enable)
{ /* Because the HVR-950q shares an i2s bus between the cs5340 and the
au8522, we need to hold cs5340 in reset when using the au8522 */ struct au0828_dev *dev = priv; if (enable == 1)
au0828_set(dev, REG_000, 0x10); else
au0828_clear(dev, REG_000, 0x10);
}
/* Tuner callback function for au0828 boards. Currently only needed *forHVR1500Q,whichhasanxc5000tuner.
*/ int au0828_tuner_callback(void *priv, int component, int command, int arg)
{ struct au0828_dev *dev = priv;
dprintk(1, "%s()\n", __func__);
switch (dev->boardnr) { case AU0828_BOARD_HAUPPAUGE_HVR850: case AU0828_BOARD_HAUPPAUGE_HVR950Q: case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL: case AU0828_BOARD_DVICO_FUSIONHDTV7: if (command == 0) { /* Tuner Reset Command from xc5000 */ /* Drive the tuner into reset and out */
au0828_clear(dev, REG_001, 2);
mdelay(10);
au0828_set(dev, REG_001, 2);
mdelay(10); return0;
} else {
pr_err("%s(): Unknown command.\n", __func__); return -EINVAL;
} break;
}
/* Make sure we support the board model */ switch (tv.model) { case72000: /* WinTV-HVR950q (Retail, IR, ATSC/QAM */ case72001: /* WinTV-HVR950q (Retail, IR, ATSC/QAM and analog video */ case72101: /* WinTV-HVR950q (Retail, IR, ATSC/QAM and analog video */ case72201: /* WinTV-HVR950q (OEM, IR, ATSC/QAM and analog video */ case72211: /* WinTV-HVR950q (OEM, IR, ATSC/QAM and analog video */ case72221: /* WinTV-HVR950q (OEM, IR, ATSC/QAM and analog video */ case72231: /* WinTV-HVR950q (OEM, IR, ATSC/QAM and analog video */ case72241: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM and analog video */ case72251: /* WinTV-HVR950q (Retail, IR, ATSC/QAM and analog video */ case72261: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM and analog video */ case72271: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM and analog video */ case72281: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM and analog video */ case72301: /* WinTV-HVR850 (Retail, IR, ATSC and analog video */ case72500: /* WinTV-HVR950q (OEM, No IR, ATSC/QAM */ break; default:
pr_warn("%s: warning: unknown hauppauge model #%d\n",
__func__, tv.model); break;
}
switch (dev->boardnr) { case AU0828_BOARD_HAUPPAUGE_HVR850: case AU0828_BOARD_HAUPPAUGE_HVR950Q: case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL: case AU0828_BOARD_HAUPPAUGE_WOODBURY: if (dev->i2c_rc == 0)
hauppauge_eeprom(dev, eeprom+0xa0); break;
}
if (AUVI_INPUT(0).type != AU0828_VMUX_UNDEFINED) { /* Load the analog demodulator driver (note this would need to beabstractedoutifweeverneedtosupportadifferent
demod) */
sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap, "au8522", 0x8e >> 1, NULL); if (sd == NULL)
pr_err("analog subdev registration failed\n");
}
/* Setup tuners */ if (dev->board.tuner_type != TUNER_ABSENT && dev->board.has_analog) { /* Load the tuner module, which does the attach */
sd = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_adap, "tuner", dev->board.tuner_addr, NULL); if (sd == NULL)
pr_err("tuner subdev registration fail\n");
switch (dev->boardnr) { case AU0828_BOARD_HAUPPAUGE_HVR850: case AU0828_BOARD_HAUPPAUGE_HVR950Q: case AU0828_BOARD_HAUPPAUGE_HVR950Q_MXL: case AU0828_BOARD_HAUPPAUGE_WOODBURY: /* GPIO's *4-CS5340 *5-AU8522Demodulator *6-eepromW/P *7-powersupply *9-XC5000Tuner
*/
/* Set relevant GPIOs as outputs (leave the EEPROM W/P asaninputsincewewillnevertouchitandithas
a pullup) */
au0828_write(dev, REG_003, 0x02);
au0828_write(dev, REG_002, 0x80 | 0x20 | 0x10);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.