cxd2099 series fixup
Subsystems (3)
cover cxd2099 series fixup
From: Daniel Scheller <[email protected]>
These are the missing bits from the cxd2099 that went MIA during the merge of the series.
Please pull - ngene driver requires the ngene patch for all I2C clients to work (including the tda18212 that's now used since the merge of the other ngene series) and ddbridge can't make use of the cxd2099 driver at all right now.
Daniel Scheller (3):
[media] ddbridge: adapt cxd2099 attach to new i2c_client way [media] ngene: add I2C_FUNC_I2C to the I2C interface functionality [media] dvb-frontends/cxd2099: remove remainders from old attach way
Jasmin Jessich (1):
[media] MAINTAINERS: add entry for cxd2099
MAINTAINERS | 8 +++++ drivers/media/dvb-frontends/cxd2099.h | 10 ------ drivers/media/pci/ddbridge/ddbridge-ci.c | 62 +++++++++++++++++++++++++++++--- drivers/media/pci/ddbridge/ddbridge.h | 1 + drivers/media/pci/ngene/ngene-i2c.c | 2 +- 5 files changed, 67 insertions(+), 16 deletions(-)
Signature · 1 line
2.16.1
PATCH 1/4 ddbridge: adapt cxd2099 attach to new i2c_client way
From: Daniel Scheller <[email protected]>
Change the way the cxd2099 hardware is being attached to the new I2C client interface way.
--- drivers/media/pci/ddbridge/ddbridge-ci.c | 62 +++++++++++++++++++++++++++++--- drivers/media/pci/ddbridge/ddbridge.h | 1 + 2 files changed, 58 insertions(+), 5 deletions(-)
drivers/media/pci/ddbridge/ddbridge-ci.c +57 -5
@@ -172,6 +172,7 @@ static void ci_attach(struct ddb_port *port)memcpy (&ci->en, &en_templ,sizeof (en_templ)); ci->en.data = ci; port->en = &ci->en; + port->en_freedata =1 ; ci->port = port; ci->nr = port->nr -2 ; }
@@ -304,6 +305,7 @@ static void ci_xo2_attach(struct ddb_port *port)memcpy (&ci->en, &en_xo2_templ,sizeof (en_xo2_templ)); ci->en.data = ci; port->en = &ci->en; + port->en_freedata =1 ; ci->port = port; ci->nr = port->nr -2 ; ci->port->creg =0 ;
@@ -311,20 +313,58 @@ static void ci_xo2_attach(struct ddb_port *port)write_creg (ci,0x08 ,0x08 ); } -static struct cxd2099_cfg cxd_cfg = { +static const struct cxd2099_cfg cxd_cfgtmpl = { .bitrate =72000 , - .adr =0x40 , .polarity =1 , .clock_mode =1 , .max_i2c =512 , }; +static int ci_cxd2099_attach (struct ddb_port *port,u32 bitrate) +{ +struct cxd2099_cfg cxd_cfg = cxd_cfgtmpl; +struct i2c_client *client; +struct i2c_board_info board_info = { + .type ="cxd2099" , + .addr =0x40 , + .platform_data = &cxd_cfg, + }; + + cxd_cfg.bitrate = bitrate; + cxd_cfg.en = &port->en; + +request_module (board_info.type); + + client =i2c_new_device (&port->i2c->adap, &board_info); +if (!client || !client->dev.driver) + goto err_ret; + +if (!try_module_get (client->dev.driver->owner)) + goto err_i2c; + +if (!port->en) + goto err_i2c; + + port->dvb[0 ].i2c_client[0 ] = client; + port->en_freedata =0 ; +return 0 ; + +err_i2c: +i2c_unregister_device (client); +err_ret: +dev_err (port->dev->dev,"CXD2099AR attach failed\n" ); +return -ENODEV ; +} +int ddb_ci_attach (struct ddb_port *port,u32 bitrate) { +int ret; +switch (port->type) {case DDB_CI_EXTERNAL_SONY : - cxd_cfg.bitrate = bitrate; - port->en =cxd2099_attach (&cxd_cfg, port, &port->i2c->adap); + ret =ci_cxd2099_attach (port, bitrate); +if (ret) +return -ENODEV ;break ;case DDB_CI_EXTERNAL_XO2 :case DDB_CI_EXTERNAL_XO2_B :
@@ -345,11 +385,23 @@ int ddb_ci_attach(struct ddb_port *port, u32 bitrate)void ddb_ci_detach (struct ddb_port *port) { +struct i2c_client *client; +if (port->dvb[0 ].dev)dvb_unregister_device (port->dvb[0 ].dev);if (port->en) {dvb_ca_en50221_release (port->en); -kfree (port->en->data); + + client = port->dvb[0 ].i2c_client[0 ]; +if (client) { +module_put (client->dev.driver->owner); +i2c_unregister_device (client); + } + +/* free alloc'ed memory if needed */ +if (port->en_freedata) +kfree (port->en->data); + port->en =NULL ; } }
drivers/media/pci/ddbridge/ddbridge.h +1 -0
@@ -276,6 +276,7 @@ struct ddb_port {struct ddb_input *input[2 ];struct ddb_output *output;struct dvb_ca_en50221 *en; +u8 en_freedata;struct ddb_dvb dvb[2 ];u32 gap;u32 obr;
Signature · 1 line
2.16.1
PATCH 2/4 ngene: add I2C_FUNC_I2C to the I2C interface functionality
In reply to Daniel SchellerFrom: Daniel Scheller <[email protected]>
Report I2C_FUNC_I2C in .functionality() aswell. The I2C interface can handle this fine and even is required for all I2C client drivers that utilise the regmap API which are used from within the ngene driver.
--- drivers/media/pci/ngene/ngene-i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/pci/ngene/ngene-i2c.c +1 -1
@@ -147,7 +147,7 @@ static int ngene_i2c_master_xfer(struct i2c_adapter *adapter,static u32 ngene_i2c_functionality (struct i2c_adapter *adap) { -return I2C_FUNC_SMBUS_EMUL ; +return I2C_FUNC_I2C |I2C_FUNC_SMBUS_EMUL ; }static const struct i2c_algorithm ngene_i2c_algo = {
Signature · 1 line
2.16.1
PATCH 3/4 dvb-frontends/cxd2099: remove remainders from old attach way
In reply to Daniel SchellerFrom: Daniel Scheller <[email protected]>
As all drivers using the cxd2099 are converted to handle attach/detach the generic I2C client way, the static inline cxd2099_attach isn't required anymore. Thus cleanup cxd2099.h from the remainders, the adr struct member isn't used anymore aswell.
--- drivers/media/dvb-frontends/cxd2099.h | 10 ---------- 1 file changed, 10 deletions(-)
drivers/media/dvb-frontends/cxd2099.h +0 -10
@@ -20,7 +20,6 @@struct cxd2099_cfg {u32 bitrate; -u8 adr;u8 polarity;u8 clock_mode;
@@ -30,13 +29,4 @@ struct cxd2099_cfg { struct dvb_ca_en50221 **en; }; -/* TODO: remove when done */ -static inline struct -dvb_ca_en50221 *cxd2099_attach (struct cxd2099_cfg *cfg,void *priv, -struct i2c_adapter *i2c) -{ -dev_warn (&i2c->dev,"%s: driver disabled by Kconfig\n" , __func__); -return NULL ; -} -#endif
Signature · 1 line
2.16.1
PATCH 4/4 MAINTAINERS: add entry for cxd2099
In reply to Daniel SchellerFrom: Jasmin Jessich <[email protected]>
The cxd2099 driver is now maintained and being taken care of by
* Jasmin Jessich <[email protected]>
--- MAINTAINERS | 8 ++++++++ 1 file changed, 8 insertions(+)
MAINTAINERS +8 -0
@@ -8612,6 +8612,14 @@ T: git git://linuxtv.org/media_tree.git S: Supported F: drivers/media/dvb-frontends/ascot2e* +MEDIA DRIVERS FOR CXD2099AR CI CONTROLLERS +M: Jasmin Jessich <[email protected]> +L: [email protected] +W: https://linuxtv.org +T: git git://linuxtv.org/media_tree.git +S: Maintained +F: drivers/media/dvb-frontends/cxd2099* + MEDIA DRIVERS FOR CXD2841ER M: Sergey Kozlov <[email protected]> M: Abylay Ospan <[email protected]>
Signature · 1 line
2.16.1