Hi all, This is the patch against kernel 2.6.32 I used to get my TV card Asus My Cinema PS3-100 (1043:48cd) to work. More information on this card can be found on this page : http://www.0xf8.org/2009/09/asus-mycinema-ps3-100-3-in-1-tv-card/ This card seems to be a clone of the Asus Tiger 3in1, numbered 147 in the SAA7134 module, so I gave it the temporary number of 1470. DVB-T and remote have been tested and work fine. DVB-S, FM and Composite input haven't been tested. Hope that will help some of you. Rémi
--- ./include/media/ir-common.h.orig 2009-12-03 04:51:21.000000000 +0100 +++ ./include/media/ir-common.h 2012-03-09 20:23:09.325249426 +0100 @@ -155,6 +155,7 @@ extern struct ir_scancode_table ir_codes extern struct ir_scancode_table ir_codes_proteus_2309_table; extern struct ir_scancode_table ir_codes_budget_ci_old_table; extern struct ir_scancode_table ir_codes_asus_pc39_table; +extern struct ir_scancode_table ir_codes_asus_ps3_100_table; extern struct ir_scancode_table ir_codes_encore_enltv_table; extern struct ir_scancode_table ir_codes_encore_enltv2_table; extern struct ir_scancode_table ir_codes_tt_1500_table; --- ./drivers/media/common/ir-keymaps.c.orig 2009-12-03 04:51:21.000000000 +0100 +++ ./drivers/media/common/ir-keymaps.c 2012-03-29 18:43:59.170879721 +0200 @@ -2064,6 +2064,70 @@ struct ir_scancode_table ir_codes_asus_p EXPORT_SYMBOL_GPL(ir_codes_asus_pc39_table); +/* + * Remi Schwartz <remi.schwartz@xxxxxxxxx> + * this is the remote control that comes with the asus my cinema ps3-100 + * base taken from pc39 one + */ +static struct ir_scancode ir_codes_asus_ps3_100[] = { + { 0x23, KEY_HOME }, /* home */ + { 0x21, KEY_TV }, /* tv */ + { 0x3c, KEY_TEXT }, /* teletext */ + { 0x16, KEY_POWER }, /* close */ + + { 0x34, KEY_RED }, /* red */ + { 0x32, KEY_YELLOW }, /* yellow */ + { 0x39, KEY_BLUE }, /* blue */ + { 0x38, KEY_GREEN }, /* green */ + + /* Keys 0 to 9 */ + { 0x15, KEY_0 }, + { 0x29, KEY_1 }, + { 0x2d, KEY_2 }, + { 0x2b, KEY_3 }, + { 0x09, KEY_4 }, + { 0x0d, KEY_5 }, + { 0x0b, KEY_6 }, + { 0x31, KEY_7 }, + { 0x35, KEY_8 }, + { 0x33, KEY_9 }, + + { 0x2a, KEY_VOLUMEUP }, + { 0x19, KEY_VOLUMEDOWN }, + { 0x0a, KEY_CHANNELUP }, /* channel / program + */ + { 0x1b, KEY_CHANNELDOWN }, /* channel / program - */ + + { 0x37, KEY_UP }, + { 0x3b, KEY_DOWN }, + { 0x27, KEY_LEFT }, + { 0x2f, KEY_RIGHT }, + { 0x1a, KEY_ENTER }, /* enter */ + + { 0x1d, KEY_EXIT }, /* back */ + { 0x13, KEY_AB }, /* recall */ + + { 0x1f, KEY_AUDIO }, /* TV audio */ + { 0x08, KEY_SCREEN }, /* snapshot */ + { 0x11, KEY_ZOOM }, /* full screen */ + { 0x3d, KEY_MUTE }, /* mute */ + + { 0x0e, KEY_REWIND }, /* backward << */ + { 0x2e, KEY_RECORD }, /* recording */ + { 0x36, KEY_STOP }, + { 0x3a, KEY_FASTFORWARD }, /* forward >> */ + { 0x1e, KEY_PREVIOUS }, /* rew */ + { 0x25, KEY_PAUSE }, /* pause */ + { 0x06, KEY_PLAY }, /* play */ + { 0x26, KEY_NEXT }, /* forward */ +}; + +struct ir_scancode_table ir_codes_asus_ps3_100_table = { + .scan = ir_codes_asus_ps3_100, + .size = ARRAY_SIZE(ir_codes_asus_ps3_100), +}; +EXPORT_SYMBOL_GPL(ir_codes_asus_ps3_100_table); + + /* Encore ENLTV-FM - black plastic, white front cover with white glowing buttons Juan Pablo Sormani <sorman@xxxxxxxxx> */ static struct ir_scancode ir_codes_encore_enltv[] = { --- ./drivers/media/video/saa7134/saa7134-input.c.orig 2009-12-03 04:51:21.000000000 +0100 +++ ./drivers/media/video/saa7134/saa7134-input.c 2012-03-09 20:23:09.337244873 +0100 @@ -575,6 +575,11 @@ int saa7134_input_init1(struct saa7134_d mask_keydown = 0x0040000; rc5_gpio = 1; break; + case SAA7134_BOARD_ASUSTeK_PS3_100: + ir_codes = &ir_codes_asus_ps3_100_table; + mask_keydown = 0x0040000; + rc5_gpio = 1; + break; case SAA7134_BOARD_ENCORE_ENLTV: case SAA7134_BOARD_ENCORE_ENLTV_FM: ir_codes = &ir_codes_encore_enltv_table; --- ./drivers/media/video/saa7134/saa7134-dvb.c.orig 2012-01-15 06:52:12.000000000 +0100 +++ ./drivers/media/video/saa7134/saa7134-dvb.c 2012-03-09 20:23:09.337244873 +0100 @@ -824,6 +824,20 @@ static struct tda1004x_config asus_tiger .request_firmware = philips_tda1004x_request_firmware }; +static struct tda1004x_config asus_ps3_100_config = { + .demod_address = 0x0b, + .invert = 1, + .invert_oclk = 0, + .xtal_freq = TDA10046_XTAL_16M, + .agc_config = TDA10046_AGC_TDA827X, + .gpio_config = TDA10046_GP11_I, + .if_freq = TDA10046_FREQ_045, + .i2c_gate = 0x4b, + .tuner_address = 0x61, + .antenna_switch = 1, + .request_firmware = philips_tda1004x_request_firmware +}; + /* ------------------------------------------------------------------ * special case: this card uses saa713x GPIO22 for the mode switch */ @@ -1465,6 +1479,31 @@ static int dvb_init(struct saa7134_dev * " found!\n", __func__); goto dettach_frontend; } + } + } + break; + case SAA7134_BOARD_ASUSTeK_PS3_100: + if (!use_frontend) { /* terrestrial */ + if (configure_tda827x_fe(dev, &asus_ps3_100_config, + &tda827x_cfg_2) < 0) + goto dettach_frontend; + } else { /* satellite */ + fe0->dvb.frontend = dvb_attach(tda10086_attach, + &flydvbs, &dev->i2c_adap); + if (fe0->dvb.frontend) { + if (dvb_attach(tda826x_attach, + fe0->dvb.frontend, 0x60, + &dev->i2c_adap, 0) == NULL) { + wprintk("%s: Asus My Cinema PS3-100, no " + "tda826x found!\n", __func__); + goto dettach_frontend; + } + if (dvb_attach(lnbp21_attach, fe0->dvb.frontend, + &dev->i2c_adap, 0, 0) == NULL) { + wprintk("%s: Asus My Cinema PS3-100, no lnbp21" + " found!\n", __func__); + goto dettach_frontend; + } } } break; --- ./drivers/media/video/saa7134/saa7134-cards.c.orig 2012-01-15 06:52:12.000000000 +0100 +++ ./drivers/media/video/saa7134/saa7134-cards.c 2012-03-09 20:23:09.341245848 +0100 @@ -5012,6 +5012,36 @@ struct saa7134_board saa7134_boards[] = .gpio = 0x0200000, }, }, + [SAA7134_BOARD_ASUSTeK_PS3_100] = { + .name = "Asus My Cinema PS3-100", + .audio_clock = 0x00187de7, + .tuner_type = TUNER_PHILIPS_TDA8290, + .radio_type = UNSET, + .tuner_addr = ADDR_UNSET, + .radio_addr = ADDR_UNSET, + .tuner_config = 2, + .gpiomask = 1 << 21, + .mpeg = SAA7134_MPEG_DVB, + .inputs = {{ + .name = name_tv, + .vmux = 1, + .amux = TV, + .tv = 1, + }, { + .name = name_comp, + .vmux = 0, + .amux = LINE2, + }, { + .name = name_svideo, + .vmux = 8, + .amux = LINE2, + } }, + .radio = { + .name = name_radio, + .amux = TV, + .gpio = 0x0200000, + }, + }, [SAA7134_BOARD_REAL_ANGEL_220] = { .name = "Zogis Real Angel 220", .audio_clock = 0x00187de7, @@ -6407,6 +6437,12 @@ struct pci_device_id saa7134_pci_tbl[] = .driver_data = SAA7134_BOARD_ASUSTeK_TIGER_3IN1, }, { .vendor = PCI_VENDOR_ID_PHILIPS, + .device = PCI_DEVICE_ID_PHILIPS_SAA7133, + .subvendor = 0x1043, + .subdevice = 0x48cd, + .driver_data = SAA7134_BOARD_ASUSTeK_PS3_100, + }, { + .vendor = PCI_VENDOR_ID_PHILIPS, .device = PCI_DEVICE_ID_PHILIPS_SAA7134, .subvendor = 0x17de, .subdevice = 0x7128, @@ -6753,6 +6789,7 @@ int saa7134_board_init1(struct saa7134_d case SAA7134_BOARD_ASUSTeK_P7131_DUAL: case SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA: case SAA7134_BOARD_ASUSTeK_P7131_ANALOG: + case SAA7134_BOARD_ASUSTeK_PS3_100: case SAA7134_BOARD_FLYDVBTDUO: case SAA7134_BOARD_PROTEUS_2309: case SAA7134_BOARD_AVERMEDIA_A16AR: @@ -7181,6 +7218,14 @@ int saa7134_board_init2(struct saa7134_d { u8 data[] = { 0x3c, 0x33, 0x60}; struct i2c_msg msg = {.addr = 0x0b, .flags = 0, .buf = data, + .len = sizeof(data)}; + i2c_transfer(&dev->i2c_adap, &msg, 1); + break; + } + case SAA7134_BOARD_ASUSTeK_PS3_100: + { + u8 data[] = { 0x3c, 0x33, 0x60}; + struct i2c_msg msg = {.addr = 0x0b, .flags = 0, .buf = data, .len = sizeof(data)}; i2c_transfer(&dev->i2c_adap, &msg, 1); break; --- ./drivers/media/video/saa7134/saa7134.h.orig 2012-01-15 06:52:12.000000000 +0100 +++ ./drivers/media/video/saa7134/saa7134.h 2012-03-09 20:23:09.341245848 +0100 @@ -271,6 +271,7 @@ struct saa7134_format { #define SAA7134_BOARD_AVERMEDIA_M103 145 #define SAA7134_BOARD_ASUSTeK_P7131_ANALOG 146 #define SAA7134_BOARD_ASUSTeK_TIGER_3IN1 147 +#define SAA7134_BOARD_ASUSTeK_PS3_100 1470 #define SAA7134_BOARD_ENCORE_ENLTV_FM53 148 #define SAA7134_BOARD_AVERMEDIA_M135A 149 #define SAA7134_BOARD_REAL_ANGEL_220 150