Some good news !! With kernel 3.2.15 and latest media-build tree, no more kernel Oops. DVB-T and remote work fine. Here is the complete patch against latest media-build tree, with fixed IR keytable. Regards, Rémi ################################################################################ Signed-off-by: Remi Schwartz <remi.schwartz@xxxxxxxxx> Index: patchwork/drivers/media/video/saa7134/saa7134-input.c =================================================================== --- patchwork.orig/drivers/media/video/saa7134/saa7134-input.c +++ patchwork/drivers/media/video/saa7134/saa7134-input.c @@ -753,6 +753,13 @@ int saa7134_input_init1(struct saa7134_d mask_keycode = 0xffff; raw_decode = true; break; + case SAA7134_BOARD_ASUSTeK_PS3_100: + ir_codes = RC_MAP_ASUS_PS3_100; + mask_keydown = 0x0040000; + mask_keyup = 0x0040000; + mask_keycode = 0xffff; + raw_decode = true; + break; case SAA7134_BOARD_ENCORE_ENLTV: case SAA7134_BOARD_ENCORE_ENLTV_FM: ir_codes = RC_MAP_ENCORE_ENLTV; Index: patchwork/drivers/media/video/saa7134/saa7134-dvb.c =================================================================== --- patchwork.orig/drivers/media/video/saa7134/saa7134-dvb.c +++ patchwork/drivers/media/video/saa7134/saa7134-dvb.c @@ -881,6 +881,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 */ @@ -1649,6 +1663,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; Index: patchwork/drivers/media/video/saa7134/saa7134-cards.c =================================================================== --- patchwork.orig/drivers/media/video/saa7134/saa7134-cards.c +++ patchwork/drivers/media/video/saa7134/saa7134-cards.c @@ -5080,6 +5080,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, @@ -6877,6 +6907,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, @@ -7350,6 +7386,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: @@ -7807,6 +7844,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; Index: patchwork/drivers/media/video/saa7134/saa7134.h =================================================================== --- patchwork.orig/drivers/media/video/saa7134/saa7134.h +++ patchwork/drivers/media/video/saa7134/saa7134.h @@ -332,6 +332,7 @@ struct saa7134_card_ir { #define SAA7134_BOARD_BEHOLD_503FM 187 #define SAA7134_BOARD_SENSORAY811_911 188 #define SAA7134_BOARD_KWORLD_PC150U 189 +#define SAA7134_BOARD_ASUSTeK_PS3_100 190 #define SAA7134_MAXBOARDS 32 #define SAA7134_INPUT_MAX 8 Index: patchwork/drivers/media/rc/keymaps/rc-asus-ps3-100.c =================================================================== --- /dev/null +++ patchwork/drivers/media/rc/keymaps/rc-asus-ps3-100.c @@ -0,0 +1,91 @@ +/* asus-ps3-100.h - Keytable for asus_ps3_100 Remote Controller + * + * Copyright (c) 2012 by Mauro Carvalho Chehab <mche...@xxxxxxxxxx> + * + * Based on a previous patch from Remi Schwartz <remi.schwa...@xxxxxxxxx> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#include <media/rc-map.h> +#include <linux/module.h> + +static struct rc_map_table asus_ps3_100[] = { + { 0x081c, KEY_HOME }, /* home */ + { 0x081e, KEY_TV }, /* tv */ + { 0x0803, KEY_TEXT }, /* teletext */ + { 0x0829, KEY_POWER }, /* close */ + + { 0x080b, KEY_RED }, /* red */ + { 0x080d, KEY_YELLOW }, /* yellow */ + { 0x0806, KEY_BLUE }, /* blue */ + { 0x0807, KEY_GREEN }, /* green */ + + /* Keys 0 to 9 */ + { 0x082a, KEY_0 }, + { 0x0816, KEY_1 }, + { 0x0812, KEY_2 }, + { 0x0814, KEY_3 }, + { 0x0836, KEY_4 }, + { 0x0832, KEY_5 }, + { 0x0834, KEY_6 }, + { 0x080e, KEY_7 }, + { 0x080a, KEY_8 }, + { 0x080c, KEY_9 }, + + { 0x0815, KEY_VOLUMEUP }, + { 0x0826, KEY_VOLUMEDOWN }, + { 0x0835, KEY_CHANNELUP }, /* channel / program + */ + { 0x0824, KEY_CHANNELDOWN }, /* channel / program - */ + + { 0x0808, KEY_UP }, + { 0x0804, KEY_DOWN }, + { 0x0818, KEY_LEFT }, + { 0x0810, KEY_RIGHT }, + { 0x0825, KEY_ENTER }, /* enter */ + + { 0x0822, KEY_EXIT }, /* back */ + { 0x082c, KEY_AB }, /* recall */ + + { 0x0820, KEY_AUDIO }, /* TV audio */ + { 0x0837, KEY_SCREEN }, /* snapshot */ + { 0x082e, KEY_ZOOM }, /* full screen */ + { 0x0802, KEY_MUTE }, /* mute */ + + { 0x0831, KEY_REWIND }, /* backward << */ + { 0x0811, KEY_RECORD }, /* recording */ + { 0x0809, KEY_STOP }, + { 0x0805, KEY_FASTFORWARD }, /* forward >> */ + { 0x0821, KEY_PREVIOUS }, /* rew */ + { 0x081a, KEY_PAUSE }, /* pause */ + { 0x0839, KEY_PLAY }, /* play */ + { 0x0819, KEY_NEXT }, /* forward */ +}; + +static struct rc_map_list asus_ps3_100_map = { + .map = { + .scan = asus_ps3_100, + .size = ARRAY_SIZE(asus_ps3_100), + .rc_type = RC_TYPE_RC5, + .name = RC_MAP_ASUS_PS3_100, + } +}; + +static int __init init_rc_map_asus_ps3_100(void) +{ + return rc_map_register(&asus_ps3_100_map); +} + +static void __exit exit_rc_map_asus_ps3_100(void) +{ + rc_map_unregister(&asus_ps3_100_map); +} + +module_init(init_rc_map_asus_ps3_100) +module_exit(exit_rc_map_asus_ps3_100) + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Mauro Carvalho Chehab <mche...@xxxxxxxxxx>"); Index: patchwork/include/media/rc-map.h =================================================================== --- patchwork.orig/include/media/rc-map.h +++ patchwork/include/media/rc-map.h @@ -62,6 +62,7 @@ #define RC_MAP_ANYSEE "rc-anysee" #define RC_MAP_APAC_VIEWCOMP "rc-apac-viewcomp" #define RC_MAP_ASUS_PC39 "rc-asus-pc39" +#define RC_MAP_ASUS_PS3_100 "rc-asus-ps3-100" #define RC_MAP_ATI_TV_WONDER_HD_600 "rc-ati-tv-wonder-hd-600" #define RC_MAP_ATI_X10 "rc-ati-x10" #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" Index: patchwork/drivers/media/rc/keymaps/Makefile =================================================================== --- patchwork.orig/drivers/media/rc/keymaps/Makefile +++ patchwork/drivers/media/rc/keymaps/Makefile @@ -3,6 +3,7 @@ rc-anysee.o \ rc-apac-viewcomp.o \ rc-asus-pc39.o \ + rc-asus-ps3-100.o \ rc-ati-tv-wonder-hd-600.o \ rc-ati-x10.o \ rc-avermedia-a16d.o \ ################################################################################ Le mercredi 16 mai 2012, remi schwartz a écrit : > Ok, I used your patch against the last media-build tree. > Here are the results. > > > * first, I added these lines to the patch to get the modules compiled : > > ################################################################### > Signed-off-by: Remi Schwartz <remi.schwartz@xxxxxxxxx> > > Index: patchwork/include/media/rc-map.h > =================================================================== > --- patchwork.orig/include/media/rc-map.h > +++ patchwork/include/media/rc-map.h > @@ -62,6 +62,7 @@ > #define RC_MAP_ANYSEE "rc-anysee" > #define RC_MAP_APAC_VIEWCOMP "rc-apac-viewcomp" > #define RC_MAP_ASUS_PC39 "rc-asus-pc39" > +#define RC_MAP_ASUS_PS3_100 "rc-asus-ps3-100" > #define RC_MAP_ATI_TV_WONDER_HD_600 "rc-ati-tv-wonder-hd-600" > #define RC_MAP_ATI_X10 "rc-ati-x10" > #define RC_MAP_AVERMEDIA_A16D "rc-avermedia-a16d" > Index: patchwork/drivers/media/rc/keymaps/Makefile > =================================================================== > --- patchwork.orig/drivers/media/rc/keymaps/Makefile > +++ patchwork/drivers/media/rc/keymaps/Makefile > @@ -3,6 +3,7 @@ > rc-anysee.o \ > rc-apac-viewcomp.o \ > rc-asus-pc39.o \ > + rc-asus-ps3-100.o \ > rc-ati-tv-wonder-hd-600.o \ > rc-ati-x10.o \ > rc-avermedia-a16d.o \ > ################################################################### > > > * then, I wanted to compile the RC part using "CONFIG_RC_CORE=y", > this is what I have obtained : > > WARNING: "rc_unregister_device" [/usr/src/media_build/v4l/saa7134.ko] > undefined! WARNING: "rc_allocate_device" > [/usr/src/media_build/v4l/saa7134.ko] undefined! WARNING: "rc_free_device" > [/usr/src/media_build/v4l/saa7134.ko] undefined! WARNING: > "ir_raw_event_store_edge" [/usr/src/media_build/v4l/saa7134.ko] undefined! > WARNING: "rc_register_device" [/usr/src/media_build/v4l/saa7134.ko] > undefined! WARNING: "rc_keydown_notimeout" > [/usr/src/media_build/v4l/saa7134.ko] undefined! WARNING: "rc_keyup" > [/usr/src/media_build/v4l/saa7134.ko] undefined! WARNING: > "ir_raw_event_handle" [/usr/src/media_build/v4l/saa7134.ko] undefined! > > and the compiled modules don't load because of unknown symbols > > > * changing to "CONFIG_RC_CORE=m" lets the modules compile and load, but > when loading, I get "BUG: unable to handle kernel NULL pointer dereference > at (null)". > > More precisely : > > [ 15.730917] saa7130/34: v4l2 driver version 0, 2, 17 loaded > [ 15.732471] saa7134 0000:01:09.0: PCI INT A -> Link[APC2] -> GSI 17 > (level, low) -> IRQ 17 [ 15.732477] saa7133[0]: found at 0000:01:09.0, > rev: 209, irq: 17, latency: 32, mmio: 0xfddfe000 [ 15.732484] > saa7133[0]: subsystem: 1043:48cd, board: Asus My Cinema PS3-100 > [card=190,autodetected] [ 15.732510] saa7133[0]: board init: gpio is > 40000 > [ 15.816459] Registered IR keymap rc-asus-ps3-100 > [ 15.816554] input: saa7134 IR (Asus My Cinema PS3- as > /devices/pci0000:00/0000:00:10.0/0000:01:09.0/rc/rc0/input5 [ 15.816611] > rc0: saa7134 IR (Asus My Cinema PS3- as > /devices/pci0000:00/0000:00:10.0/0000:01:09.0/rc/rc0 [ 15.830376] IRQ > 17/saa7133[0]: IRQF_DISABLED is not guaranteed on shared IRQs [ > 15.830428] BUG: unable to handle kernel NULL pointer dereference at (null) > [ 15.830431] IP: [<ffffffff812fcd21>] _spin_lock_irqsave+0x1a/0x34 [ > 15.830438] PGD 0 > [ 15.830440] Oops: 0002 [#1] SMP > [ 15.830442] last sysfs file: /sys/devices/virtual/dmi/id/sys_vendor > [ 15.830445] CPU 0 > [ 15.830446] Modules linked in: snd_hda_intel(+) snd_hda_codec snd_hwdep > snd_pcm_oss snd_mixer_oss rc_asus_ps3_100 snd_pcm snd_seq_midi snd_rawmidi > saa7134(+) snd_seq_midi_event snd_seq rc_core snd_timer snd_seq_device > parport_pc parport videobuf_dma_sg videobuf_core v4l2_common videodev > tveeprom asus_atk0110 snd amd64_edac_mod(-) i2c_nforce2 button evdev > pcspkr psmouse serio_raw soundcore snd_page_alloc edac_core edac_mce_amd > k8temp i2c_core processor ext4 mbcache jbd2 crc16 sg sd_mod crc_t10dif > sr_mod cdrom ohci_hcd ata_generic sata_nv ehci_hcd fan pata_amd > firewire_ohci floppy firewire_core crc_itu_t thermal libata scsi_mod > usbcore nls_base thermal_sys forcedeth [last unloaded: scsi_wait_scan] > [ 15.830479] Pid: 810, comm: rc0 Not tainted 2.6.32-5-amd64 #1 System > Product Name [ 15.830481] RIP: 0010:[<ffffffff812fcd21>] > [<ffffffff812fcd21>] _spin_lock_irqsave+0x1a/0x34 [ 15.830486] RSP: > 0018:ffff8800ae147e90 EFLAGS: 00010086 > [ 15.830488] RAX: 0000000000000086 RBX: ffff8800ad60cde0 RCX: > ffff8800ae15a350 [ 15.830490] RDX: 0000000000010000 RSI: > 0000000000000086 RDI: 0000000000000000 [ 15.830492] RBP: > ffff8800abc86a00 R08: ffff8800ae146000 R09: ffff880001815780 [ > 15.830494] R10: 0000000000000011 R11: ffff8800aec0f000 R12: > ffff8800ae7a3c58 [ 15.830496] R13: ffff8800abc86a18 R14: > ffff8800ae15a350 R15: 0000000000000000 [ 15.830498] FS: > 00007f3c4693d7a0(0000) GS:ffff880001800000(0000) knlGS:0000000000000000 [ > 15.830500] CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b > [ 15.830502] CR2: 0000000000000000 CR3: 00000000ad2b7000 CR4: > 00000000000006f0 [ 15.830504] DR0: 0000000000000000 DR1: > 0000000000000000 DR2: 0000000000000000 [ 15.830506] DR3: > 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [ > 15.830509] Process rc0 (pid: 810, threadinfo ffff8800ae146000, task > ffff8800ae15a350) [ 15.830510] Stack: > [ 15.830511] 0000000300000b2f ffffffffa031a533 ffff8800abc86a00 > ffff8800ae7a3c60 [ 15.830514] <0> 0000000000000286 ffff8800ae147ef8 > ffff8800abc86a00 ffff8800ae7a3c58 [ 15.830517] <0> ffffffffa031a4f8 > 0000000000000001 0000000000000000 ffffffff81064d75 [ 15.830520] Call > Trace: > [ 15.830526] [<ffffffffa031a533>] ? ir_raw_event_thread+0x3b/0x103 > [rc_core] [ 15.830530] [<ffffffffa031a4f8>] ? > ir_raw_event_thread+0x0/0x103 [rc_core] [ 15.830534] > [<ffffffff81064d75>] ? kthread+0x79/0x81 > [ 15.830538] [<ffffffff81011baa>] ? child_rip+0xa/0x20 > [ 15.830541] [<ffffffff81064cfc>] ? kthread+0x0/0x81 > [ 15.830543] [<ffffffff81011ba0>] ? child_rip+0x0/0x20 > [ 15.830544] Code: 31 d2 89 d0 c3 f0 83 2f 01 79 05 e8 7a 98 e9 ff c3 48 > 83 ec 08 9c 58 66 66 90 66 90 48 89 c6 fa 66 66 90 66 66 90 ba 00 00 01 00 > <f0> 0f c1 17 0f b7 ca c1 ea 10 39 d1 74 07 f3 90 0f b7 0f eb f5 [ > 15.830561] RIP [<ffffffff812fcd21>] _spin_lock_irqsave+0x1a/0x34 [ > 15.830564] RSP <ffff8800ae147e90> > [ 15.830566] CR2: 0000000000000000 > [ 15.830568] ---[ end trace b4dbd3b68f659105 ]--- > [ 17.488028] saa7133[0]: i2c eeprom 00: 43 10 cd 48 54 20 1c 00 43 43 a9 > 1c 55 d2 b2 92 [ 17.539962] input: ImPS/2 Generic Wheel Mouse as > /devices/platform/i8042/serio1/input/input6 [ 17.568983] saa7133[0]: i2c > eeprom 10: ff ff ff 0f ff 20 ff ff ff ff ff ff ff ff ff ff [ 17.596222] > saa7133[0]: i2c eeprom 20: 01 40 01 02 03 01 01 03 08 ff 00 2c ff ff ff ff > [ 17.623127] saa7133[0]: i2c eeprom 30: ff ff ff ff ff ff ff ff ff ff ff > ff ff ff ff ff [ 17.649744] saa7133[0]: i2c eeprom 40: ff 28 00 c2 96 16 > 03 02 c0 1c ff ff ff ff ff ff [ 17.649750] saa7133[0]: i2c eeprom 50: ff > ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff [ 17.649756] saa7133[0]: > i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff [ > 17.649761] saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff > ff ff ff ff [ 17.649767] saa7133[0]: i2c eeprom 80: ff ff ff ff ff ff ff > ff ff ff ff ff ff ff ff ff [ 17.649772] saa7133[0]: i2c eeprom 90: ff ff > ff ff ff ff ff ff ff ff ff ff ff ff ff ff [ 17.649777] saa7133[0]: i2c > eeprom a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff [ 17.649783] > saa7133[0]: i2c eeprom b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > [ 17.649788] saa7133[0]: i2c eeprom c0: ff ff ff ff ff ff ff ff ff ff ff > ff ff ff ff ff [ 17.649794] saa7133[0]: i2c eeprom d0: ff ff ff ff ff ff > ff ff ff ff ff ff ff ff ff ff [ 17.649799] saa7133[0]: i2c eeprom e0: ff > ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff [ 17.649804] saa7133[0]: > i2c eeprom f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff [ > 17.940097] tuner 2-004b: Tuner -1 found with type(s) Radio TV. [ > 18.036085] tda829x 2-004b: setting tuner address to 61 > [ 18.116017] tda829x 2-004b: type set to tda8290+75a > [ 22.076088] saa7133[0]: registered device video0 [v4l2] > [ 22.098506] saa7133[0]: registered device vbi0 > [ 22.120431] saa7133[0]: registered device radio0 > [ 22.160012] dvb_init() allocating 1 frontend > [ 22.256099] DVB: registering new adapter (saa7133[0]) > [ 22.276274] DVB: registering adapter 0 frontend 0 (Philips TDA10046H > DVB-T)... [ 22.648018] tda1004x: setting up plls for 48MHz sampling > clock > [ 22.952014] tda1004x: found firmware revision 29 -- ok > [ 23.444186] saa7134 ALSA driver for DMA sound loaded > [ 23.465213] IRQ 17/saa7133[0]: IRQF_DISABLED is not guaranteed on shared > IRQs [ 23.486751] saa7133[0]/alsa: saa7133[0] at 0xfddfe000 irq 17 > registered as card -1 > > There seems to be a problem in the RC code. > I haven't found where the problem is. It is perhaps related to this : > > http://article.gmane.org/gmane.linux.kernel.input/15312 > > I have tested the DVB-T part and it works fine but remote doesn't work. > If I hit a remote key, the kernel freeze. > > If you find a solution to this pointer problem, I can finish the work on > the RC keycode table. > > Regards, > > Rémi > > Le mardi 15 mai 2012, Mauro Carvalho Chehab a écrit : > > Em 05-04-2012 06:40, remi schwartz escreveu: > > > 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. > > > > Please, don't sent patches against older kernel versions, as they won't > > apply anymore upstream. In particular, since kernel 2.6.32, the entire > > RC code were re-written. > > > > You can test the very latest media code using the media-build tree, > > > > available at: > > http://git.linuxtv.org/media_build.git > > > > It compiles against old kernels (although won't compile the gspca driver > > since yesterday, as I'm applying a massive amount of patches those days > > and didn't have any time yet to fix gspca build). > > > > > 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. > > > > In order to help adding support for this board, I re-wrote your code to > > apply it against the latest build. > > > > I suspect that your RC keycode table is incomplete, as it is getting just > > the 8 least significant bits. So, you'll need to test it and fix the > > IR keytable. > > > > Please test. Feel free to modify it, as I suspect that you'll need to > > re-work with the RC part of it. > > > > Regards, > > Mauro > > > > - > > > > Add support for Asus My Cinema PS3-100 (1043:48cd) > > > > Based on a previous patch from remi schwartz <remi.schwartz@xxxxxxxxx> > > > > Thanks-to: Remi Schwartz <remi.schwartz@xxxxxxxxx> > > Signed-off-to: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> > > > > > > Index: patchwork/drivers/media/video/saa7134/saa7134-input.c > > =================================================================== > > --- patchwork.orig/drivers/media/video/saa7134/saa7134-input.c > > +++ patchwork/drivers/media/video/saa7134/saa7134-input.c > > @@ -753,6 +753,11 @@ int saa7134_input_init1(struct saa7134_d > > > > mask_keycode = 0xffff; > > raw_decode = true; > > break; > > > > + case SAA7134_BOARD_ASUSTeK_PS3_100: > > + ir_codes = RC_MAP_ASUS_PS3_100; > > + mask_keydown = 0x0040000; > > + raw_decode = true; > > + break; > > > > case SAA7134_BOARD_ENCORE_ENLTV: > > > > case SAA7134_BOARD_ENCORE_ENLTV_FM: > > ir_codes = RC_MAP_ENCORE_ENLTV; > > > > Index: patchwork/drivers/media/video/saa7134/saa7134-dvb.c > > =================================================================== > > --- patchwork.orig/drivers/media/video/saa7134/saa7134-dvb.c > > +++ patchwork/drivers/media/video/saa7134/saa7134-dvb.c > > @@ -881,6 +881,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 > > */ > > > > @@ -1649,6 +1663,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; > > > > Index: patchwork/drivers/media/video/saa7134/saa7134-cards.c > > =================================================================== > > --- patchwork.orig/drivers/media/video/saa7134/saa7134-cards.c > > +++ patchwork/drivers/media/video/saa7134/saa7134-cards.c > > @@ -5080,6 +5080,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, > > > > @@ -6877,6 +6907,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, > > > > @@ -7350,6 +7386,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: > > @@ -7807,6 +7844,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; > > > > Index: patchwork/drivers/media/video/saa7134/saa7134.h > > =================================================================== > > --- patchwork.orig/drivers/media/video/saa7134/saa7134.h > > +++ patchwork/drivers/media/video/saa7134/saa7134.h > > @@ -332,6 +332,7 @@ struct saa7134_card_ir { > > > > #define SAA7134_BOARD_BEHOLD_503FM 187 > > #define SAA7134_BOARD_SENSORAY811_911 188 > > #define SAA7134_BOARD_KWORLD_PC150U 189 > > > > +#define SAA7134_BOARD_ASUSTeK_PS3_100 190 > > > > #define SAA7134_MAXBOARDS 32 > > #define SAA7134_INPUT_MAX 8 > > > > Index: patchwork/drivers/media/rc/keymaps/rc-asus-ps3-100.c > > =================================================================== > > --- /dev/null > > +++ patchwork/drivers/media/rc/keymaps/rc-asus-ps3-100.c > > @@ -0,0 +1,91 @@ > > +/* asus-ps3-100.h - Keytable for asus_ps3_100 Remote Controller > > + * > > + * Copyright (c) 2012 by Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> > > + * > > + * Based on a previous patch from Remi Schwartz > > <remi.schwartz@xxxxxxxxx> + * > > + * This program is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License as published by > > + * the Free Software Foundation; either version 2 of the License, or > > + * (at your option) any later version. > > + */ > > + > > +#include <media/rc-map.h> > > +#include <linux/module.h> > > + > > +static struct rc_map_table 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 */ > > +}; > > + > > +static struct rc_map_list asus_ps3_100_map = { > > + .map = { > > + .scan = asus_ps3_100, > > + .size = ARRAY_SIZE(asus_ps3_100), > > + .rc_type = RC_TYPE_RC5, > > + .name = RC_MAP_ASUS_PS3_100, > > + } > > +}; > > + > > +static int __init init_rc_map_asus_ps3_100(void) > > +{ > > + return rc_map_register(&asus_ps3_100_map); > > +} > > + > > +static void __exit exit_rc_map_asus_ps3_100(void) > > +{ > > + rc_map_unregister(&asus_ps3_100_map); > > +} > > + > > +module_init(init_rc_map_asus_ps3_100) > > +module_exit(exit_rc_map_asus_ps3_100) > > + > > +MODULE_LICENSE("GPL"); > > +MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>"); -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html