[PATCH] cx231xx: Add support for KWorld UB445-U

2013-08-16 Thread Johannes Erdfelt
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..

2011-04-12 Thread Jarod Wilson
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..

2011-04-11 Thread Márcio Alves
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

2010-11-08 Thread Mauro Carvalho Chehab
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