Skip to content

Commit

Permalink
[media] cx23885: add i2c client handling into dvb_unregister and state
Browse files Browse the repository at this point in the history
Prepare cx23885 driver for handling I2C client that is needed for certain demodulators and tuners (for example Si2168 and Si2157). I2C client for tuner and demod stored in state and unregistering of the I2C devices added into dvb_unregister.

Signed-off-by: Olli Salonen <[email protected]>
Reviewed-by: Antti Palosaari <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
trsqr authored and mchehab committed Sep 24, 2014
1 parent 49310ed commit b0b12e6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
23 changes: 16 additions & 7 deletions drivers/media/pci/cx23885/cx23885-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1688,15 +1688,24 @@ int cx23885_dvb_register(struct cx23885_tsport *port)
int cx23885_dvb_unregister(struct cx23885_tsport *port)
{
struct vb2_dvb_frontend *fe0;
struct i2c_client *client;

/* remove I2C client for tuner */
client = port->i2c_client_tuner;
if (client) {
module_put(client->dev.driver->owner);
i2c_unregister_device(client);
}

/* remove I2C client for demodulator */
client = port->i2c_client_demod;
if (client) {
module_put(client->dev.driver->owner);
i2c_unregister_device(client);
}

/* FIXME: in an error condition where the we have
* an expected number of frontends (attach problem)
* then this might not clean up correctly, if 1
* is invalid.
* This comment only applies to future boards IF they
* implement MFE support.
*/
fe0 = vb2_dvb_get_frontend(&port->frontends, 1);

if (fe0 && fe0->dvb.frontend)
vb2_dvb_unregister_bus(&port->frontends);

Expand Down
3 changes: 3 additions & 0 deletions drivers/media/pci/cx23885/cx23885.h
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,9 @@ struct cx23885_tsport {
/* Workaround for a temp dvb_frontend that the tuner can attached to */
struct dvb_frontend analog_fe;

struct i2c_client *i2c_client_demod;
struct i2c_client *i2c_client_tuner;

int (*set_frontend)(struct dvb_frontend *fe);
};

Expand Down

0 comments on commit b0b12e6

Please sign in to comment.