aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/dvb/frontends/drxk.h21
-rw-r--r--drivers/media/dvb/frontends/drxk_hard.c21
-rw-r--r--drivers/media/dvb/frontends/drxk_hard.h9
3 files changed, 33 insertions, 18 deletions
diff --git a/drivers/media/dvb/frontends/drxk.h b/drivers/media/dvb/frontends/drxk.h
index 9c99f31369c..67589b607c4 100644
--- a/drivers/media/dvb/frontends/drxk.h
+++ b/drivers/media/dvb/frontends/drxk.h
@@ -4,10 +4,25 @@
4#include <linux/types.h> 4#include <linux/types.h>
5#include <linux/i2c.h> 5#include <linux/i2c.h>
6 6
7/**
8 * struct drxk_config - Configure the initial parameters for DRX-K
9 *
10 * adr: I2C Address of the DRX-K
11 * single_master: Device is on the single master mode
12 * no_i2c_bridge: Don't switch the I2C bridge to talk with tuner
13 * antenna_uses_gpio: Use GPIO to control the antenna
14 * antenna_dvbc: GPIO for changing antenna to DVB-C
15 * antenna_dvbt: GPIO for changing antenna to DVB-T
16 * microcode_name: Name of the firmware file with the microcode
17 */
7struct drxk_config { 18struct drxk_config {
8 u8 adr; 19 u8 adr;
9 u32 single_master : 1; 20 bool single_master;
10 u32 no_i2c_bridge : 1; 21 bool no_i2c_bridge;
22
23 bool antenna_uses_gpio;
24 u16 antenna_dvbc, antenna_dvbt;
25
11 const char *microcode_name; 26 const char *microcode_name;
12}; 27};
13 28
diff --git a/drivers/media/dvb/frontends/drxk_hard.c b/drivers/media/dvb/frontends/drxk_hard.c
index 1d29ed23154..91f3296917f 100644
--- a/drivers/media/dvb/frontends/drxk_hard.c
+++ b/drivers/media/dvb/frontends/drxk_hard.c
@@ -618,6 +618,10 @@ error:
618 618
619static int init_state(struct drxk_state *state) 619static int init_state(struct drxk_state *state)
620{ 620{
621 /*
622 * FIXME: most (all?) of the values bellow should be moved into
623 * struct drxk_config, as they are probably board-specific
624 */
621 u32 ulVSBIfAgcMode = DRXK_AGC_CTRL_AUTO; 625 u32 ulVSBIfAgcMode = DRXK_AGC_CTRL_AUTO;
622 u32 ulVSBIfAgcOutputLevel = 0; 626 u32 ulVSBIfAgcOutputLevel = 0;
623 u32 ulVSBIfAgcMinLevel = 0; 627 u32 ulVSBIfAgcMinLevel = 0;
@@ -672,10 +676,6 @@ static int init_state(struct drxk_state *state)
672 u32 ulRfMirror = 1; 676 u32 ulRfMirror = 1;
673 u32 ulPowerDown = 0; 677 u32 ulPowerDown = 0;
674 678
675 u32 ulAntennaDVBT = 1;
676 u32 ulAntennaDVBC = 0;
677 u32 ulAntennaSwitchDVBTDVBC = 0;
678
679 dprintk(1, "\n"); 679 dprintk(1, "\n");
680 680
681 state->m_hasLNA = false; 681 state->m_hasLNA = false;
@@ -858,11 +858,6 @@ static int init_state(struct drxk_state *state)
858 state->m_GPIOCfg = (ulGPIOCfg); 858 state->m_GPIOCfg = (ulGPIOCfg);
859 state->m_GPIO = (ulGPIO == 0 ? 0 : 1); 859 state->m_GPIO = (ulGPIO == 0 ? 0 : 1);
860 860
861 state->m_AntennaDVBT = (ulAntennaDVBT == 0 ? 0 : 1);
862 state->m_AntennaDVBC = (ulAntennaDVBC == 0 ? 0 : 1);
863 state->m_AntennaSwitchDVBTDVBC =
864 (ulAntennaSwitchDVBTDVBC == 0 ? 0 : 1);
865
866 state->m_bPowerDown = false; 861 state->m_bPowerDown = false;
867 state->m_currentPowerMode = DRX_POWER_DOWN; 862 state->m_currentPowerMode = DRX_POWER_DOWN;
868 863
@@ -5819,9 +5814,10 @@ error:
5819 5814
5820static int SwitchAntennaToQAM(struct drxk_state *state) 5815static int SwitchAntennaToQAM(struct drxk_state *state)
5821{ 5816{
5822 int status = -EINVAL; 5817 int status = 0;
5823 5818
5824 dprintk(1, "\n"); 5819 dprintk(1, "\n");
5820
5825 if (state->m_AntennaSwitchDVBTDVBC != 0) { 5821 if (state->m_AntennaSwitchDVBTDVBC != 0) {
5826 if (state->m_GPIO != state->m_AntennaDVBC) { 5822 if (state->m_GPIO != state->m_AntennaDVBC) {
5827 state->m_GPIO = state->m_AntennaDVBC; 5823 state->m_GPIO = state->m_AntennaDVBC;
@@ -5835,7 +5831,7 @@ static int SwitchAntennaToQAM(struct drxk_state *state)
5835 5831
5836static int SwitchAntennaToDVBT(struct drxk_state *state) 5832static int SwitchAntennaToDVBT(struct drxk_state *state)
5837{ 5833{
5838 int status = -EINVAL; 5834 int status = 0;
5839 5835
5840 dprintk(1, "\n"); 5836 dprintk(1, "\n");
5841 if (state->m_AntennaSwitchDVBTDVBC != 0) { 5837 if (state->m_AntennaSwitchDVBTDVBC != 0) {
@@ -6344,6 +6340,9 @@ struct dvb_frontend *drxk_attach(const struct drxk_config *config,
6344 state->single_master = config->single_master; 6340 state->single_master = config->single_master;
6345 state->microcode_name = config->microcode_name; 6341 state->microcode_name = config->microcode_name;
6346 state->no_i2c_bridge = config->no_i2c_bridge; 6342 state->no_i2c_bridge = config->no_i2c_bridge;
6343 state->m_AntennaSwitchDVBTDVBC = config->antenna_uses_gpio;
6344 state->m_AntennaDVBC = config->antenna_dvbc;
6345 state->m_AntennaDVBT = config->antenna_dvbt;
6347 6346
6348 mutex_init(&state->mutex); 6347 mutex_init(&state->mutex);
6349 mutex_init(&state->ctlock); 6348 mutex_init(&state->ctlock);
diff --git a/drivers/media/dvb/frontends/drxk_hard.h b/drivers/media/dvb/frontends/drxk_hard.h
index b042755188c..8b29dc89f58 100644
--- a/drivers/media/dvb/frontends/drxk_hard.h
+++ b/drivers/media/dvb/frontends/drxk_hard.h
@@ -321,16 +321,17 @@ struct drxk_state {
321 u8 m_deviceSpin; 321 u8 m_deviceSpin;
322 u32 m_iqmRcRate; 322 u32 m_iqmRcRate;
323 323
324 u16 m_AntennaDVBC;
325 u16 m_AntennaDVBT;
326 u16 m_AntennaSwitchDVBTDVBC;
327
328 enum DRXPowerMode m_currentPowerMode; 324 enum DRXPowerMode m_currentPowerMode;
329 325
330 /* Configurable parameters at the driver */ 326 /* Configurable parameters at the driver */
331 327
328 bool m_AntennaSwitchDVBTDVBC;
329 u16 m_AntennaDVBC;
330 u16 m_AntennaDVBT;
331
332 u32 single_master : 1; /* Use single master i2c mode */ 332 u32 single_master : 1; /* Use single master i2c mode */
333 u32 no_i2c_bridge : 1; /* Tuner is not on port 1, don't use I2C bridge */ 333 u32 no_i2c_bridge : 1; /* Tuner is not on port 1, don't use I2C bridge */
334
334 const char *microcode_name; 335 const char *microcode_name;
335 336
336}; 337};