diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/dvb/frontends/drxk.h | 21 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/drxk_hard.c | 21 | ||||
-rw-r--r-- | drivers/media/dvb/frontends/drxk_hard.h | 9 |
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 | */ | ||
7 | struct drxk_config { | 18 | struct 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 | ||
619 | static int init_state(struct drxk_state *state) | 619 | static 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 | ||
5820 | static int SwitchAntennaToQAM(struct drxk_state *state) | 5815 | static 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 | ||
5836 | static int SwitchAntennaToDVBT(struct drxk_state *state) | 5832 | static 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 | }; |