@ -2268,9 +2268,107 @@ static int dvb_register(struct cx23885_tsport *port)
}
break ;
}
case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB :
switch ( port - > nr ) {
/* port b - Terrestrial/cable */
case 1 :
/* attach frontend */
memset ( & si2168_config , 0 , sizeof ( si2168_config ) ) ;
si2168_config . i2c_adapter = & adapter ;
si2168_config . fe = & fe0 - > dvb . frontend ;
si2168_config . ts_mode = SI2168_TS_SERIAL ;
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
strlcpy ( info . type , " si2168 " , I2C_NAME_SIZE ) ;
info . addr = 0x64 ;
info . platform_data = & si2168_config ;
request_module ( " %s " , info . type ) ;
client_demod = i2c_new_device ( & dev - > i2c_bus [ 0 ] . i2c_adap , & info ) ;
if ( ! client_demod | | ! client_demod - > dev . driver )
goto frontend_detach ;
if ( ! try_module_get ( client_demod - > dev . driver - > owner ) ) {
i2c_unregister_device ( client_demod ) ;
goto frontend_detach ;
}
port - > i2c_client_demod = client_demod ;
/* attach tuner */
memset ( & si2157_config , 0 , sizeof ( si2157_config ) ) ;
si2157_config . fe = fe0 - > dvb . frontend ;
si2157_config . if_port = 1 ;
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
strlcpy ( info . type , " si2157 " , I2C_NAME_SIZE ) ;
info . addr = 0x60 ;
info . platform_data = & si2157_config ;
request_module ( " %s " , info . type ) ;
client_tuner = i2c_new_device ( & dev - > i2c_bus [ 1 ] . i2c_adap , & info ) ;
if ( ! client_tuner | | ! client_tuner - > dev . driver ) {
module_put ( client_demod - > dev . driver - > owner ) ;
i2c_unregister_device ( client_demod ) ;
port - > i2c_client_demod = NULL ;
goto frontend_detach ;
}
if ( ! try_module_get ( client_tuner - > dev . driver - > owner ) ) {
i2c_unregister_device ( client_tuner ) ;
module_put ( client_demod - > dev . driver - > owner ) ;
i2c_unregister_device ( client_demod ) ;
port - > i2c_client_demod = NULL ;
goto frontend_detach ;
}
port - > i2c_client_tuner = client_tuner ;
break ;
/* port c - terrestrial/cable */
case 2 :
/* attach frontend */
memset ( & si2168_config , 0 , sizeof ( si2168_config ) ) ;
si2168_config . i2c_adapter = & adapter ;
si2168_config . fe = & fe0 - > dvb . frontend ;
si2168_config . ts_mode = SI2168_TS_SERIAL ;
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
strlcpy ( info . type , " si2168 " , I2C_NAME_SIZE ) ;
info . addr = 0x66 ;
info . platform_data = & si2168_config ;
request_module ( " %s " , info . type ) ;
client_demod = i2c_new_device ( & dev - > i2c_bus [ 0 ] . i2c_adap , & info ) ;
if ( ! client_demod | | ! client_demod - > dev . driver )
goto frontend_detach ;
if ( ! try_module_get ( client_demod - > dev . driver - > owner ) ) {
i2c_unregister_device ( client_demod ) ;
goto frontend_detach ;
}
port - > i2c_client_demod = client_demod ;
/* attach tuner */
memset ( & si2157_config , 0 , sizeof ( si2157_config ) ) ;
si2157_config . fe = fe0 - > dvb . frontend ;
si2157_config . if_port = 1 ;
memset ( & info , 0 , sizeof ( struct i2c_board_info ) ) ;
strlcpy ( info . type , " si2157 " , I2C_NAME_SIZE ) ;
info . addr = 0x62 ;
info . platform_data = & si2157_config ;
request_module ( " %s " , info . type ) ;
client_tuner = i2c_new_device ( & dev - > i2c_bus [ 1 ] . i2c_adap , & info ) ;
if ( ! client_tuner | | ! client_tuner - > dev . driver ) {
module_put ( client_demod - > dev . driver - > owner ) ;
i2c_unregister_device ( client_demod ) ;
port - > i2c_client_demod = NULL ;
goto frontend_detach ;
}
if ( ! try_module_get ( client_tuner - > dev . driver - > owner ) ) {
i2c_unregister_device ( client_tuner ) ;
module_put ( client_demod - > dev . driver - > owner ) ;
i2c_unregister_device ( client_demod ) ;
port - > i2c_client_demod = NULL ;
goto frontend_detach ;
}
port - > i2c_client_tuner = client_tuner ;
break ;
}
break ;
default :
printk ( KERN_INFO " %s: The frontend of your DVB/ATSC card "
" isn't supported yet \n " ,
" isn't supported yet \n " ,
dev - > name ) ;
break ;
}