void em28xx_card_setup(struct em28xx *dev) { /* request some modules */ switch(dev->model){ case EM2820_BOARD_HAUPPAUGE_WINTV_USB_2: { struct tveeprom tv; #ifdef CONFIG_MODULES request_module("tveeprom"); request_module("ir-kbd-i2c"); request_module("msp3400"); #endif /* Call first TVeeprom */ dev->i2c_client.addr = 0xa0 >> 1; tveeprom_hauppauge_analog(&dev->i2c_client, &tv, dev->eedata); dev->tuner_type= tv.tuner_type; if (tv.audio_processor == AUDIO_CHIP_MSP34XX) { dev->i2s_speed=2048000; dev->has_msp34xx=1; } else dev->has_msp34xx=0; break; } case EM2820_BOARD_KWORLD_PVRTV2800RF: { em28xx_write_regs_req(dev,0x00,0x08, "\xf9", 1); // GPIO enables sound on KWORLD PVR TV 2800RF break; } } }
void em28xx_pre_card_setup(struct em28xx *dev) { /* request some modules */ switch(dev->model){ case EM2880_BOARD_TERRATEC_PRODIGY_XS: case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: case EM2880_BOARD_TERRATEC_HYBRID_XS: { em28xx_write_regs_req(dev, 0x00, 0x08, "\x7d", 1); // reset through GPIO? break; } } }
int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len) { int rc; rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len); /* Stores GPO/GPIO values at the cache, if changed Only write values should be stored, since input on a GPIO register will return the input bits. Not sure what happens on reading GPO register. */ if (rc >= 0) { if (reg == dev->reg_gpo_num) dev->reg_gpo = buf[0]; else if (reg == dev->reg_gpio_num) dev->reg_gpio = buf[0]; } return rc; }