Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d1b5265 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] cx23885: Add DTV support for Mygica X8502/X8507 boards



Those boards were missing the ISDB-T support.
Most of the work on this patch were done by Alfredo.
My work here were to port this patch from Kernel 3.2 to upstream,
fix the issue caused by the set_frontend bad hook, and add the
Kconfig bits.
Tested on a X8502 board rebranded as:
"Leadership - Placa PCI-e de Captura de Vídeo Híbrida" - product code 3800.

Thanks-to: Alfredo Delaiti <alfredodelaiti@netscape.net>
Tested-by: default avatarAlfredo Delaiti <alfredodelaiti@netscape.net>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 9d32069f
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ config VIDEO_CX23885
	select DVB_STV0367 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_STV0367 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TDA10071 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TDA10071 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_A8293 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_A8293 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_MB86A20S if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2063 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2063 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2131 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2131 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_XC2028 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_XC2028 if MEDIA_SUBDRV_AUTOSELECT
+4 −2
Original line number Original line Diff line number Diff line
@@ -528,11 +528,12 @@ struct cx23885_board cx23885_boards[] = {
		} },
		} },
	},
	},
	[CX23885_BOARD_MYGICA_X8507] = {
	[CX23885_BOARD_MYGICA_X8507] = {
		.name		= "Mygica X8507",
		.name		= "Mygica X8502/X8507 ISDB-T",
		.tuner_type = TUNER_XC5000,
		.tuner_type = TUNER_XC5000,
		.tuner_addr = 0x61,
		.tuner_addr = 0x61,
		.tuner_bus	= 1,
		.tuner_bus	= 1,
		.porta		= CX23885_ANALOG_VIDEO,
		.porta		= CX23885_ANALOG_VIDEO,
		.portb		= CX23885_MPEG_DVB,
		.input		= {
		.input		= {
			{
			{
				.type   = CX23885_VMUX_TELEVISION,
				.type   = CX23885_VMUX_TELEVISION,
@@ -1281,7 +1282,7 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
	case CX23885_BOARD_MYGICA_X8507:
	case CX23885_BOARD_MYGICA_X8507:
		/* GPIO-0 (0)Analog / (1)Digital TV */
		/* GPIO-0 (0)Analog / (1)Digital TV */
		/* GPIO-1 reset XC5000 */
		/* GPIO-1 reset XC5000 */
		/* GPIO-2 reset LGS8GL5 / LGS8G75 */
		/* GPIO-2 demod reset */
		cx23885_gpio_enable(dev, GPIO_0 | GPIO_1 | GPIO_2, 1);
		cx23885_gpio_enable(dev, GPIO_0 | GPIO_1 | GPIO_2, 1);
		cx23885_gpio_clear(dev, GPIO_1 | GPIO_2);
		cx23885_gpio_clear(dev, GPIO_1 | GPIO_2);
		mdelay(100);
		mdelay(100);
@@ -1677,6 +1678,7 @@ void cx23885_card_setup(struct cx23885_dev *dev)
		break;
		break;
	case CX23885_BOARD_MYGICA_X8506:
	case CX23885_BOARD_MYGICA_X8506:
	case CX23885_BOARD_MAGICPRO_PROHDTVE2:
	case CX23885_BOARD_MAGICPRO_PROHDTVE2:
	case CX23885_BOARD_MYGICA_X8507:
		ts1->gen_ctrl_val  = 0x5; /* Parallel */
		ts1->gen_ctrl_val  = 0x5; /* Parallel */
		ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
		ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
		ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
		ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
+25 −0
Original line number Original line Diff line number Diff line
@@ -69,6 +69,7 @@
#include "stb6100_cfg.h"
#include "stb6100_cfg.h"
#include "tda10071.h"
#include "tda10071.h"
#include "a8293.h"
#include "a8293.h"
#include "mb86a20s.h"


static unsigned int debug;
static unsigned int debug;


@@ -492,6 +493,15 @@ static struct xc5000_config mygica_x8506_xc5000_config = {
	.if_khz = 5380,
	.if_khz = 5380,
};
};


static struct mb86a20s_config mygica_x8507_mb86a20s_config = {
	.demod_address = 0x10,
};

static struct xc5000_config mygica_x8507_xc5000_config = {
	.i2c_address = 0x61,
	.if_khz = 4000,
};

static struct stv090x_config prof_8000_stv090x_config = {
static struct stv090x_config prof_8000_stv090x_config = {
	.device                 = STV0903,
	.device                 = STV0903,
	.demod_mode             = STV090x_SINGLE,
	.demod_mode             = STV090x_SINGLE,
@@ -548,6 +558,7 @@ static int cx23885_dvb_set_frontend(struct dvb_frontend *fe)
		}
		}
		break;
		break;
	case CX23885_BOARD_MYGICA_X8506:
	case CX23885_BOARD_MYGICA_X8506:
	case CX23885_BOARD_MYGICA_X8507:
	case CX23885_BOARD_MAGICPRO_PROHDTVE2:
	case CX23885_BOARD_MAGICPRO_PROHDTVE2:
		/* Select Digital TV */
		/* Select Digital TV */
		cx23885_gpio_set(dev, GPIO_0);
		cx23885_gpio_set(dev, GPIO_0);
@@ -1114,6 +1125,20 @@ static int dvb_register(struct cx23885_tsport *port)
		}
		}
		cx23885_set_frontend_hook(port, fe0->dvb.frontend);
		cx23885_set_frontend_hook(port, fe0->dvb.frontend);
		break;
		break;
	case CX23885_BOARD_MYGICA_X8507:
		i2c_bus = &dev->i2c_bus[0];
		i2c_bus2 = &dev->i2c_bus[1];
		fe0->dvb.frontend = dvb_attach(mb86a20s_attach,
			&mygica_x8507_mb86a20s_config,
			&i2c_bus->i2c_adap);
		if (fe0->dvb.frontend != NULL) {
			dvb_attach(xc5000_attach,
			fe0->dvb.frontend,
			&i2c_bus2->i2c_adap,
			&mygica_x8507_xc5000_config);
		}
		cx23885_set_frontend_hook(port, fe0->dvb.frontend);
		break;
	case CX23885_BOARD_MAGICPRO_PROHDTVE2:
	case CX23885_BOARD_MAGICPRO_PROHDTVE2:
		i2c_bus = &dev->i2c_bus[0];
		i2c_bus = &dev->i2c_bus[0];
		i2c_bus2 = &dev->i2c_bus[1];
		i2c_bus2 = &dev->i2c_bus[1];