Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 192747
b: refs/heads/master
c: 7f2c983
h: refs/heads/master
i:
  192745: 4e148a2
  192743: 195c1f0
v: v3
  • Loading branch information
Devin Heitmueller authored and Mauro Carvalho Chehab committed May 18, 2010
1 parent 9c740e6 commit ea34f66
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 535653b1c22c29d4e8f554928efc87fe138f917d
refs/heads/master: 7f2c983cf5978186ee2c379fd63d04316158fc9b
2 changes: 2 additions & 0 deletions trunk/drivers/media/dvb/frontends/au8522_decoder.c
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,8 @@ static int au8522_reset(struct v4l2_subdev *sd, u32 val)
{
struct au8522_state *state = to_state(sd);

state->operational_mode = AU8522_ANALOG_MODE;

au8522_writereg(state, 0xa4, 1 << 5);

return 0;
Expand Down
21 changes: 21 additions & 0 deletions trunk/drivers/media/dvb/frontends/au8522_dig.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,14 @@ static int au8522_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)

dprintk("%s(%d)\n", __func__, enable);

if (state->operational_mode == AU8522_ANALOG_MODE) {
/* We're being asked to manage the gate even though we're
not in digital mode. This can occur if we get switched
over to analog mode before the dvb_frontend kernel thread
has completely shutdown */
return 0;
}

if (enable)
return au8522_writereg(state, 0x106, 1);
else
Expand Down Expand Up @@ -608,6 +616,8 @@ int au8522_init(struct dvb_frontend *fe)
struct au8522_state *state = fe->demodulator_priv;
dprintk("%s()\n", __func__);

state->operational_mode = AU8522_DIGITAL_MODE;

au8522_writereg(state, 0xa4, 1 << 5);

au8522_i2c_gate_ctrl(fe, 1);
Expand Down Expand Up @@ -704,6 +714,15 @@ int au8522_sleep(struct dvb_frontend *fe)
struct au8522_state *state = fe->demodulator_priv;
dprintk("%s()\n", __func__);

/* Only power down if the digital side is currently using the chip */
if (state->operational_mode == AU8522_ANALOG_MODE) {
/* We're not in one of the expected power modes, which means
that the DVB thread is probably telling us to go to sleep
even though the analog frontend has already started using
the chip. So ignore the request */
return 0;
}

/* turn off led */
au8522_led_ctrl(state, 0);

Expand Down Expand Up @@ -932,6 +951,8 @@ struct dvb_frontend *au8522_attach(const struct au8522_config *config,
/* setup the state */
state->config = config;
state->i2c = i2c;
state->operational_mode = AU8522_DIGITAL_MODE;

/* create dvb_frontend */
memcpy(&state->frontend.ops, &au8522_ops,
sizeof(struct dvb_frontend_ops));
Expand Down
5 changes: 5 additions & 0 deletions trunk/drivers/media/dvb/frontends/au8522_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,15 @@
#include "au8522.h"
#include "tuner-i2c.h"

#define AU8522_ANALOG_MODE 0
#define AU8522_DIGITAL_MODE 1

struct au8522_state {
struct i2c_client *c;
struct i2c_adapter *i2c;

u8 operational_mode;

/* Used for sharing of the state between analog and digital mode */
struct tuner_i2c_props i2c_props;
struct list_head hybrid_tuner_instance_list;
Expand Down

0 comments on commit ea34f66

Please sign in to comment.