Commit ec573362 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

[media] em28xx: add support for PCTV DVB-S2 Stick (461e) [2013:0258]

Device has following chips: Empia EM28178, Montage M88DS3103,
Montage M88TS2022, Allegro A8293.
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 695efd01
......@@ -49,6 +49,8 @@ config VIDEO_EM28XX_DVB
select DVB_MB86A20S if MEDIA_SUBDRV_AUTOSELECT
select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT
select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
select MEDIA_TUNER_M88TS2022 if MEDIA_SUBDRV_AUTOSELECT
---help---
This adds support for DVB cards based on the
Empiatech em28xx chips.
......
......@@ -356,6 +356,28 @@ static struct em28xx_reg_seq c3tech_digital_duo_digital[] = {
{ -1, -1, -1, -1},
};
/*
* 2013:0258 PCTV DVB-S2 Stick (461e)
* GPIO 0 = POWER_ON
* GPIO 1 = BOOST
* GPIO 2 = VUV_LNB (red LED)
* GPIO 3 = #EXT_12V
* GPIO 4 = INT_DEM
* GPIO 5 = INT_LNB
* GPIO 6 = #RESET_DEM
* GPIO 7 = P07_LED (green LED)
*/
static struct em28xx_reg_seq pctv_461e[] = {
{EM2874_R80_GPIO_P0_CTRL, 0x7f, 0xff, 0},
{0x0d, 0xff, 0xff, 0},
{EM2874_R80_GPIO_P0_CTRL, 0x3f, 0xff, 100}, /* reset demod */
{EM2874_R80_GPIO_P0_CTRL, 0x7f, 0xff, 200}, /* reset demod */
{0x0d, 0x42, 0xff, 0},
{EM2874_R80_GPIO_P0_CTRL, 0xeb, 0xff, 0},
{EM2874_R5F_TS_ENABLE, 0x84, 0x84, 0}, /* parallel? | null discard */
{ -1, -1, -1, -1},
};
#if 0
static struct em28xx_reg_seq hauppauge_930c_gpio[] = {
{EM2874_R80_GPIO_P0_CTRL, 0x6f, 0xff, 10},
......@@ -2125,6 +2147,17 @@ struct em28xx_board em28xx_boards[] = {
.buttons = speedlink_vad_laplace_buttons,
.leds = speedlink_vad_laplace_leds,
},
/* 2013:0258 PCTV DVB-S2 Stick (461e)
* Empia EM28178, Montage M88DS3103, Montage M88TS2022, Allegro A8293 */
[EM28178_BOARD_PCTV_461E] = {
.def_i2c_bus = 1,
.i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | EM28XX_I2C_FREQ_400_KHZ,
.name = "PCTV DVB-S2 Stick (461e)",
.tuner_type = TUNER_ABSENT,
.tuner_gpio = pctv_461e,
.has_dvb = 1,
.ir_codes = RC_MAP_PINNACLE_PCTV_HD,
},
};
const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
......@@ -2294,6 +2327,8 @@ struct usb_device_id em28xx_id_table[] = {
.driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE },
{ USB_DEVICE(0x1ae7, 0x9004),
.driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE },
{ USB_DEVICE(0x2013, 0x0258),
.driver_info = EM28178_BOARD_PCTV_461E },
{ },
};
MODULE_DEVICE_TABLE(usb, em28xx_id_table);
......
......@@ -51,6 +51,8 @@
#include "a8293.h"
#include "qt1010.h"
#include "mb86a20s.h"
#include "m88ds3103.h"
#include "m88ts2022.h"
MODULE_DESCRIPTION("driver for em28xx based DVB cards");
MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>");
......@@ -808,6 +810,19 @@ static struct tda18271_config c3tech_duo_tda18271_config = {
.small_i2c = TDA18271_03_BYTE_CHUNK_INIT,
};
static const struct m88ds3103_config pctv_461e_m88ds3103_config = {
.i2c_addr = 0x68,
.clock = 27000000,
.i2c_wr_max = 33,
.clock_out = 0,
.ts_mode = M88DS3103_TS_PARALLEL_16,
.agc = 0x99,
};
static const struct m88ts2022_config em28xx_m88ts2022_config = {
.i2c_addr = 0x60,
.clock = 27000000,
};
/* ------------------------------------------------------------------ */
......@@ -1330,6 +1345,44 @@ static int em28xx_dvb_init(struct em28xx *dev)
goto out_free;
}
break;
case EM28178_BOARD_PCTV_461E:
{
/* demod I2C adapter */
struct i2c_adapter *i2c_adapter;
/* attach demod */
dvb->fe[0] = dvb_attach(m88ds3103_attach,
&pctv_461e_m88ds3103_config,
&dev->i2c_adap[dev->def_i2c_bus],
&i2c_adapter);
if (dvb->fe[0] == NULL) {
result = -ENODEV;
goto out_free;
}
/* attach tuner */
if (!dvb_attach(m88ts2022_attach, dvb->fe[0],
i2c_adapter,
&em28xx_m88ts2022_config)) {
dvb_frontend_detach(dvb->fe[0]);
result = -ENODEV;
goto out_free;
}
/* delegate signal strength measurement to tuner */
dvb->fe[0]->ops.read_signal_strength =
dvb->fe[0]->ops.tuner_ops.get_rf_strength;
/* attach SEC */
if (!dvb_attach(a8293_attach, dvb->fe[0],
&dev->i2c_adap[dev->def_i2c_bus],
&em28xx_a8293_config)) {
dvb_frontend_detach(dvb->fe[0]);
result = -ENODEV;
goto out_free;
}
}
break;
default:
em28xx_errdev("/2: The frontend of your DVB/ATSC card"
" isn't supported yet\n");
......
......@@ -133,6 +133,7 @@
#define EM2874_BOARD_DELOCK_61959 89
#define EM2874_BOARD_KWORLD_UB435Q_V2 90
#define EM2765_BOARD_SPEEDLINK_VAD_LAPLACE 91
#define EM28178_BOARD_PCTV_461E 92
/* Limits minimum and default number of buffers */
#define EM28XX_MIN_BUF 4
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment