[PATCH] cx231xx: Add support for KWorld UB445-U
The KWorld UB445-U is similar to the UB430-AF but with a Samsung S5H1411 frontend. Luckily all of the hardware is already well supported, just the device and USB ids need to be added to get it to work. Signed-off-by: Johannes Erdfelt johan...@erdfelt.com --- drivers/media/usb/cx231xx/cx231xx-cards.c | 40 +++ drivers/media/usb/cx231xx/cx231xx-dvb.c | 1 + drivers/media/usb/cx231xx/cx231xx.h | 1 + 3 files changed, 42 insertions(+) diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c index 27948e1..a384f80 100644 --- a/drivers/media/usb/cx231xx/cx231xx-cards.c +++ b/drivers/media/usb/cx231xx/cx231xx-cards.c @@ -443,6 +443,44 @@ struct cx231xx_board cx231xx_boards[] = { .gpio = NULL, } }, }, + [CX231XX_BOARD_KWORLD_UB445_USB_HYBRID] = { + .name = Kworld UB445 USB Hybrid, + .tuner_type = TUNER_NXP_TDA18271, + .tuner_addr = 0x60, + .decoder = CX231XX_AVDECODER, + .output_mode = OUT_MODE_VIP11, + .demod_xfer_mode = 0, + .ctl_pin_status_mask = 0xFFC4, + .agc_analog_digital_select_gpio = 0x11, /* According with PV cxPolaris.inf file */ + .tuner_sif_gpio = -1, + .tuner_scl_gpio = -1, + .tuner_sda_gpio = -1, + .gpio_pin_status_mask = 0x4001000, + .tuner_i2c_master = 2, + .demod_i2c_master = 1, + .ir_i2c_master = 2, + .has_dvb = 1, + .demod_addr = 0x10, + .norm = V4L2_STD_NTSC_M, + .input = {{ + .type = CX231XX_VMUX_TELEVISION, + .vmux = CX231XX_VIN_3_1, + .amux = CX231XX_AMUX_VIDEO, + .gpio = NULL, + }, { + .type = CX231XX_VMUX_COMPOSITE1, + .vmux = CX231XX_VIN_2_1, + .amux = CX231XX_AMUX_LINE_IN, + .gpio = NULL, + }, { + .type = CX231XX_VMUX_SVIDEO, + .vmux = CX231XX_VIN_1_1 | + (CX231XX_VIN_1_2 8) | + CX25840_SVIDEO_ON, + .amux = CX231XX_AMUX_LINE_IN, + .gpio = NULL, + } }, + }, [CX231XX_BOARD_PV_PLAYTV_USB_HYBRID] = { .name = Pixelview PlayTV USB Hybrid, .tuner_type = TUNER_NXP_TDA18271, @@ -703,6 +741,8 @@ struct usb_device_id cx231xx_id_table[] = { .driver_info = CX231XX_BOARD_PV_XCAPTURE_USB}, {USB_DEVICE(0x1b80, 0xe424), .driver_info = CX231XX_BOARD_KWORLD_UB430_USB_HYBRID}, + {USB_DEVICE(0x1b80, 0xe421), +.driver_info = CX231XX_BOARD_KWORLD_UB445_USB_HYBRID}, {USB_DEVICE(0x1f4d, 0x0237), .driver_info = CX231XX_BOARD_ICONBIT_U100}, {USB_DEVICE(0x0fd9, 0x0037), diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c index 14e2610..4504bc6 100644 --- a/drivers/media/usb/cx231xx/cx231xx-dvb.c +++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c @@ -657,6 +657,7 @@ static int dvb_init(struct cx231xx *dev) } break; case CX231XX_BOARD_CNXT_RDU_253S: + case CX231XX_BOARD_KWORLD_UB445_USB_HYBRID: dev-dvb-frontend = dvb_attach(s5h1411_attach, tda18271_s5h1411_config, diff --git a/drivers/media/usb/cx231xx/cx231xx.h b/drivers/media/usb/cx231xx/cx231xx.h index e812119..babca7f 100644 --- a/drivers/media/usb/cx231xx/cx231xx.h +++ b/drivers/media/usb/cx231xx/cx231xx.h @@ -72,6 +72,7 @@ #define CX231XX_BOARD_HAUPPAUGE_USB2_FM_NTSC 15 #define CX231XX_BOARD_ELGATO_VIDEO_CAPTURE_V2 16 #define CX231XX_BOARD_OTG102 17 +#define CX231XX_BOARD_KWORLD_UB445_USB_HYBRID 18 /* Limits minimum and default number of buffers */ #define CX231XX_MIN_BUF 4 -- 1.8.3.4 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: cx231xx: add support for Kworld..
On Apr 11, 2011, at 6:57 PM, Márcio Alves wrote: patch to cx231xx: add support for Kworld UB430 Signed-off-by: Márcio A Alves fr...@gmail.com diff -upr ../new_build2/linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h --- ../new_build2/linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h 2011-02-28 01:45:23.0 -0300 +++ linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h2011-04-11 14:23:31.836858001 -0300 @@ -125,6 +125,7 @@ #define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0 #define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1 #define USB_PID_INTEL_CE9500 0x9500 +#define USB_PID_KWORLD_UB430 0xe424 #define USB_PID_KWORLD_399U 0xe399 #define USB_PID_KWORLD_399U_20xe400 #define USB_PID_KWORLD_395U 0xe396 That addition does nothing, since cx231xx-*.c don't include that header. Its only for use by drivers under dvb-usb/. Just leave this out. ... diff -upr ../new_build2/linux//drivers/media/video/cx231xx/cx231xx.h linux//drivers/media/video/cx231xx/cx231xx.h --- ../new_build2/linux//drivers/media/video/cx231xx/cx231xx.h 2011-03-11 13:25:49.0 -0300 +++ linux//drivers/media/video/cx231xx/cx231xx.h 2011-04-11 14:20:30.616858003 -0300 @@ -64,7 +64,8 @@ #define CX231XX_BOARD_HAUPPAUGE_EXETER 8 #define CX231XX_BOARD_HAUPPAUGE_USBLIVE2 9 #define CX231XX_BOARD_PV_PLAYTV_USB_HYBRID 10 -#define CX231XX_BOARD_PV_XCAPTURE_USB 11 +#define CX231XX_BOARD_KWORLD_UB430_USB_HYBRID 11 +#define CX231XX_BOARD_PV_XCAPTURE_USB 12 /* Limits minimum and default number of buffers */ #define CX231XX_MIN_BUF 4 You should add to the end of the list, as device 12, not move an already existing device. Those two minor nits aside, the patch looks sane. -- Jarod Wilson ja...@wilsonet.com -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
cx231xx: add support for Kworld..
patch to cx231xx: add support for Kworld UB430 Signed-off-by: Márcio A Alves fr...@gmail.com diff -upr ../new_build2/linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h --- ../new_build2/linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h 2011-02-28 01:45:23.0 -0300 +++ linux//drivers/media/dvb/dvb-usb/dvb-usb-ids.h 2011-04-11 14:23:31.836858001 -0300 @@ -125,6 +125,7 @@ #define USB_PID_GRANDTEC_DVBT_USB_COLD 0x0fa0 #define USB_PID_GRANDTEC_DVBT_USB_WARM 0x0fa1 #define USB_PID_INTEL_CE95000x9500 +#define USB_PID_KWORLD_UB4300xe424 #define USB_PID_KWORLD_399U0xe399 #define USB_PID_KWORLD_399U_20xe400 #define USB_PID_KWORLD_395U0xe396 diff -upr ../new_build2/linux//drivers/media/video/cx231xx/cx231xx-cards.c linux//drivers/media/video/cx231xx/cx231xx-cards.c --- ../new_build2/linux//drivers/media/video/cx231xx/cx231xx-cards.c 2011-02-25 01:45:17.0 -0300 +++ linux//drivers/media/video/cx231xx/cx231xx-cards.c 2011-04-11 15:15:42.776857999 -0300 @@ -401,6 +401,44 @@ struct cx231xx_board cx231xx_boards[] = .gpio = NULL, } }, }, + [CX231XX_BOARD_KWORLD_UB430_USB_HYBRID] = { + .name = Kworld UB430 USB Hybrid, + .tuner_type = TUNER_NXP_TDA18271, + .tuner_addr = 0x60, + .decoder = CX231XX_AVDECODER, + .output_mode = OUT_MODE_VIP11, + .demod_xfer_mode = 0, + .ctl_pin_status_mask = 0xFFC4, + .agc_analog_digital_select_gpio = 0x11, /* According with PV cxPolaris.inf file */ + .tuner_sif_gpio = -1, + .tuner_scl_gpio = -1, + .tuner_sda_gpio = -1, + .gpio_pin_status_mask = 0x4001000, + .tuner_i2c_master = 2, + .demod_i2c_master = 1, + .ir_i2c_master = 2, + .has_dvb = 1, + .demod_addr = 0x10, + .norm = V4L2_STD_PAL_M, + .input = {{ + .type = CX231XX_VMUX_TELEVISION, + .vmux = CX231XX_VIN_3_1, + .amux = CX231XX_AMUX_VIDEO, + .gpio = NULL, + }, { + .type = CX231XX_VMUX_COMPOSITE1, + .vmux = CX231XX_VIN_2_1, + .amux = CX231XX_AMUX_LINE_IN, + .gpio = NULL, + }, { + .type = CX231XX_VMUX_SVIDEO, + .vmux = CX231XX_VIN_1_1 | +(CX231XX_VIN_1_2 8) | +CX25840_SVIDEO_ON, + .amux = CX231XX_AMUX_LINE_IN, + .gpio = NULL, + } }, + }, [CX231XX_BOARD_PV_PLAYTV_USB_HYBRID] = { .name = Pixelview PlayTV USB Hybrid, .tuner_type = TUNER_NXP_TDA18271, @@ -500,6 +538,8 @@ struct usb_device_id cx231xx_id_table[] .driver_info = CX231XX_BOARD_PV_PLAYTV_USB_HYBRID}, {USB_DEVICE(USB_VID_PIXELVIEW, 0x5014), .driver_info = CX231XX_BOARD_PV_XCAPTURE_USB}, + {USB_DEVICE(0x1b80, 0xe424), + .driver_info = CX231XX_BOARD_KWORLD_UB430_USB_HYBRID}, {}, }; @@ -534,12 +574,13 @@ int cx231xx_tuner_callback(void *ptr, in case TDA18271_CALLBACK_CMD_AGC_ENABLE: if (dev-model == CX231XX_BOARD_PV_PLAYTV_USB_HYBRID) rc = cx231xx_set_agc_analog_digital_mux_select(dev, arg); + break; default: rc = -EINVAL; break; } - } + } return rc; } EXPORT_SYMBOL_GPL(cx231xx_tuner_callback); diff -upr ../new_build2/linux//drivers/media/video/cx231xx/cx231xx-dvb.c linux//drivers/media/video/cx231xx/cx231xx-dvb.c --- ../new_build2/linux//drivers/media/video/cx231xx/cx231xx-dvb.c 2011-01-17 01:45:24.0 -0300 +++ linux//drivers/media/video/cx231xx/cx231xx-dvb.c 2011-04-11 14:16:15.986858003 -0300 @@ -703,6 +703,30 @@ static int dvb_init(struct cx231xx *dev) hcw_tda18271_config); break; + case CX231XX_BOARD_KWORLD_UB430_USB_HYBRID: + + printk(KERN_INFO %s: looking for demod on i2c bus: %d\n, + __func__, i2c_adapter_id(dev-i2c_bus[dev-board.tuner_i2c_master].i2c_adap)); + + dev-dvb-frontend = dvb_attach(mb86a20s_attach, + pv_mb86a20s_config, + dev-i2c_bus[dev-board.demod_i2c_master].i2c_adap); + + if (dev-dvb-frontend == NULL) { + printk(DRIVER_NAME + : Failed to attach mb86a20s demod\n); + result = -EINVAL; + goto out_free; + } + + /* define general-purpose callback pointer */ + dvb-frontend-callback = cx231xx_tuner_callback; + + dvb_attach(tda18271_attach, dev-dvb-frontend, + 0x60, dev-i2c_bus[dev-board.tuner_i2c_master].i2c_adap, + pv_tda18271_config); + break; + case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID: printk(KERN_INFO %s: looking for demod on i2c bus: %d\n, diff -upr ../new_build2/linux//drivers/media/video/cx231xx/cx231xx.h linux//drivers/media/video/cx231xx/cx231xx.h --- ../new_build2/linux//drivers/media/video/cx231xx/cx231xx.h 2011-03-11 13:25:49.0 -0300 +++ linux//drivers/media/video/cx231xx/cx231xx.h 2011-04-11 14:20:30.616858003 -0300 @@ -64,7 +64,8 @@ #define CX231XX_BOARD_HAUPPAUGE_EXETER 8 #define CX231XX_BOARD_HAUPPAUGE_USBLIVE2 9 #define CX231XX_BOARD_PV_PLAYTV_USB_HYBRID 10 -#define CX231XX_BOARD_PV_XCAPTURE_USB 11 +#define CX231XX_BOARD_KWORLD_UB430_USB_HYBRID 11 +#define CX231XX_BOARD_PV_XCAPTURE_USB 12 /* Limits minimum and default number of buffers */ #define CX231XX_MIN_BUF 4
[RFC PATCH] cx231xx: Add support for Kworld UB430 AF
This device seems to be close to Pixelview design. Probably, the remote controller is different. Also, AGC selection doesn't seem to use any GPIO writing, at least from the logs I got from Márcio. Reported by: Márcio Araújo Alves fr...@gmail.com Signed-off-by: Mauro Carvalho Chehab mche...@redhat.com --- PS.: This patch is to be applied against staging/for_v2.6.38 branch at the main tree: http://git.linuxtv.org/media_tree.git?a=shortlog;h=refs/heads/staging/for_v2.6.38 Márcio, Could you please test it? It would be wonderful if you could test the new IR support. You should uncomment the code bellow (commented with #if 0), and, eventually, you'll need to play with RC keymaps. I'd appreciate if you could send me some parsed logs for both analog and digital modes. I've improved the cx231xx-specific parser at v4l-apps, in order to catch GPIO changes. So far, I didn't get any trial to change GPIO bits on your logs (nor on my logs with Pixelview). When I have more time, I'll try to do more tests on it. drivers/media/dvb/dvb-usb/dvb-usb-ids.h |1 drivers/media/video/cx231xx/cx231xx-cards.c | 48 2 files changed, 49 insertions(+) --- patchwork.orig/drivers/media/video/cx231xx/cx231xx-cards.c +++ patchwork/drivers/media/video/cx231xx/cx231xx-cards.c @@ -435,6 +435,52 @@ struct cx231xx_board cx231xx_boards[] = .gpio = 0, } }, }, + [CX231XX_BOARD_KWORLD_U430_AF] = { + .name = Kworld UB430-AF, + .tuner_type = TUNER_NXP_TDA18271, + .tuner_addr = 0x60, + .decoder = CX231XX_AVDECODER, + .output_mode = OUT_MODE_VIP11, + .demod_xfer_mode = 0, + .ctl_pin_status_mask = 0xFFC4, + .agc_analog_digital_select_gpio = 0x, + .tuner_sif_gpio = -1, + .tuner_scl_gpio = -1, + .tuner_sda_gpio = -1, + .gpio_pin_status_mask = 0x4001000, + .tuner_i2c_master = 2, + .demod_i2c_master = 1, +#if 0 + /* +* FIXME: it is very likely that this device uses an I2C +* remote controller. Not sure if it will use the same +* i2c addr as Pixelview, or what's the keycode map. +*/ + .ir_i2c_master = 2, + .rc_map = RC_MAP_KWORLD_315U, +#endif + .has_dvb = 1, + .demod_addr = 0x10, + .norm = V4L2_STD_PAL_M, + .input = {{ + .type = CX231XX_VMUX_TELEVISION, + .vmux = CX231XX_VIN_3_1, + .amux = CX231XX_AMUX_VIDEO, + .gpio = 0, + }, { + .type = CX231XX_VMUX_COMPOSITE1, + .vmux = CX231XX_VIN_2_1, + .amux = CX231XX_AMUX_LINE_IN, + .gpio = 0, + }, { + .type = CX231XX_VMUX_SVIDEO, + .vmux = CX231XX_VIN_1_1 | + (CX231XX_VIN_1_2 8) | + CX25840_SVIDEO_ON, + .amux = CX231XX_AMUX_LINE_IN, + .gpio = 0, + } }, + }, }; const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards); @@ -464,6 +510,8 @@ struct usb_device_id cx231xx_id_table[] .driver_info = CX231XX_BOARD_HAUPPAUGE_USBLIVE2}, {USB_DEVICE_VER(USB_VID_PIXELVIEW, USB_PID_PIXELVIEW_SBTVD, 0x4000, 0x4001), .driver_info = CX231XX_BOARD_PV_PLAYTV_USB_HYBRID}, + {USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB430_AF), +.driver_info = CX231XX_BOARD_KWORLD_U430_AF}, {}, }; --- patchwork.orig/drivers/media/dvb/dvb-usb/dvb-usb-ids.h +++ patchwork/drivers/media/dvb/dvb-usb/dvb-usb-ids.h @@ -130,6 +130,7 @@ #define USB_PID_KWORLD_PC160_2T0xc160 #define USB_PID_KWORLD_PC160_T 0xc161 #define USB_PID_KWORLD_UB383_T 0xe383 +#define USB_PID_KWORLD_UB430_AF0xe424 #define USB_PID_KWORLD_VSTREAM_COLD0x17de #define USB_PID_KWORLD_VSTREAM_WARM0x17df #define USB_PID_TERRATEC_CINERGY_T_USB_XE 0x0055 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html