Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 17278
b: refs/heads/master
c: 1c956a3
h: refs/heads/master
v: v3
  • Loading branch information
Vadim Catana authored and Mauro Carvalho Chehab committed Jan 9, 2006
1 parent ffc3fda commit 1a57279
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 22 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e3b152bc9ee2b7f841565dc93a042f527cf3116c
refs/heads/master: 1c956a3ac087b7590296f5a0be2cdab2666158cd
98 changes: 77 additions & 21 deletions trunk/drivers/media/dvb/frontends/cx24123.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
Copyright (C) 2005 Steven Toth <stoth@hauppauge.com>
Support for KWorld DVB-S 100 by Vadim Catana <skystar@moldova.cc>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
Expand Down Expand Up @@ -573,7 +575,8 @@ static int cx24123_initfe(struct dvb_frontend* fe)
state->config->pll_init(fe);

/* Configure the LNB for 14V */
cx24123_writelnbreg(state, 0x0, 0x2a);
if (state->config->use_isl6421)
cx24123_writelnbreg(state, 0x0, 0x2a);

return 0;
}
Expand All @@ -583,18 +586,49 @@ static int cx24123_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage
struct cx24123_state *state = fe->demodulator_priv;
u8 val;

val = cx24123_readlnbreg(state, 0x0);
switch (state->config->use_isl6421) {

switch (voltage) {
case SEC_VOLTAGE_13:
return cx24123_writelnbreg(state, 0x0, val & 0x32); /* V 13v */
case SEC_VOLTAGE_18:
return cx24123_writelnbreg(state, 0x0, val | 0x04); /* H 18v */
case SEC_VOLTAGE_OFF:
return cx24123_writelnbreg(state, 0x0, val & 0x30);
default:
return -EINVAL;
};
case 1:

val = cx24123_readlnbreg(state, 0x0);

switch (voltage) {
case SEC_VOLTAGE_13:
return cx24123_writelnbreg(state, 0x0, val & 0x32); /* V 13v */
case SEC_VOLTAGE_18:
return cx24123_writelnbreg(state, 0x0, val | 0x04); /* H 18v */
case SEC_VOLTAGE_OFF:
return cx24123_writelnbreg(state, 0x0, val & 0x30);
default:
return -EINVAL;
};

case 0:

val = cx24123_readreg(state, 0x29);

switch (voltage) {
case SEC_VOLTAGE_13:
dprintk("%s: setting voltage 13V\n", __FUNCTION__);
if (state->config->enable_lnb_voltage)
state->config->enable_lnb_voltage(fe, 1);
return cx24123_writereg(state, 0x29, val | 0x80);
case SEC_VOLTAGE_18:
dprintk("%s: setting voltage 18V\n", __FUNCTION__);
if (state->config->enable_lnb_voltage)
state->config->enable_lnb_voltage(fe, 1);
return cx24123_writereg(state, 0x29, val & 0x7f);
case SEC_VOLTAGE_OFF:
dprintk("%s: setting voltage off\n", __FUNCTION__);
if (state->config->enable_lnb_voltage)
state->config->enable_lnb_voltage(fe, 0);
return 0;
default:
return -EINVAL;
};
}

return 0;
}

static int cx24123_send_diseqc_msg(struct dvb_frontend* fe,
Expand Down Expand Up @@ -729,17 +763,39 @@ static int cx24123_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone)
struct cx24123_state *state = fe->demodulator_priv;
u8 val;

val = cx24123_readlnbreg(state, 0x0);
switch (state->config->use_isl6421) {
case 1:

val = cx24123_readlnbreg(state, 0x0);

switch (tone) {
case SEC_TONE_ON:
return cx24123_writelnbreg(state, 0x0, val | 0x10);
case SEC_TONE_OFF:
return cx24123_writelnbreg(state, 0x0, val & 0x2f);
default:
printk("%s: CASE reached default with tone=%d\n", __FUNCTION__, tone);
return -EINVAL;
switch (tone) {
case SEC_TONE_ON:
return cx24123_writelnbreg(state, 0x0, val | 0x10);
case SEC_TONE_OFF:
return cx24123_writelnbreg(state, 0x0, val & 0x2f);
default:
printk("%s: CASE reached default with tone=%d\n", __FUNCTION__, tone);
return -EINVAL;
}

case 0:

val = cx24123_readreg(state, 0x29);

switch (tone) {
case SEC_TONE_ON:
dprintk("%s: setting tone on\n", __FUNCTION__);
return cx24123_writereg(state, 0x29, val | 0x10);
case SEC_TONE_OFF:
dprintk("%s: setting tone off\n",__FUNCTION__);
return cx24123_writereg(state, 0x29, val & 0xef);
default:
printk("%s: CASE reached default with tone=%d\n", __FUNCTION__, tone);
return -EINVAL;
}
}

return 0;
}

static void cx24123_release(struct dvb_frontend* fe)
Expand Down
9 changes: 9 additions & 0 deletions trunk/drivers/media/dvb/frontends/cx24123.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,21 @@ struct cx24123_config
/* the demodulator's i2c address */
u8 demod_address;

/*
cards like Hauppauge Nova-S Plus/Nova-SE2 use an Intersil ISL6421 chip
for LNB control, while KWorld DVB-S 100 use the LNBDC and LNBTone bits
from register 0x29 of the CX24123 demodulator
*/
int use_isl6421;

/* PLL maintenance */
int (*pll_init)(struct dvb_frontend* fe);
int (*pll_set)(struct dvb_frontend* fe, struct dvb_frontend_parameters* params);

/* Need to set device param for start_dma */
int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured);

void (*enable_lnb_voltage)(struct dvb_frontend* fe, int on);
};

extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config,
Expand Down

0 comments on commit 1a57279

Please sign in to comment.