Message ID | 1437996130-23735-2-git-send-email-crope@iki.fi (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Em Mon, 27 Jul 2015 14:22:05 +0300 Antti Palosaari <crope@iki.fi> escreveu: > Add proper i2c driver model bindings. Hi Antti, What's the status of this patch series? You submitted them on July, but never sent me a pull request... Regards, Mauro > > Signed-off-by: Antti Palosaari <crope@iki.fi> > --- > drivers/media/tuners/mt2060.c | 83 ++++++++++++++++++++++++++++++++++++++ > drivers/media/tuners/mt2060.h | 20 +++++++++ > drivers/media/tuners/mt2060_priv.h | 2 + > 3 files changed, 105 insertions(+) > > diff --git a/drivers/media/tuners/mt2060.c b/drivers/media/tuners/mt2060.c > index b87b254..aa8280a 100644 > --- a/drivers/media/tuners/mt2060.c > +++ b/drivers/media/tuners/mt2060.c > @@ -397,6 +397,89 @@ struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter > } > EXPORT_SYMBOL(mt2060_attach); > > +static int mt2060_probe(struct i2c_client *client, > + const struct i2c_device_id *id) > +{ > + struct mt2060_platform_data *pdata = client->dev.platform_data; > + struct dvb_frontend *fe; > + struct mt2060_priv *dev; > + int ret; > + u8 chip_id; > + > + dev_dbg(&client->dev, "\n"); > + > + if (!pdata) { > + dev_err(&client->dev, "Cannot proceed without platform data\n"); > + ret = -EINVAL; > + goto err; > + } > + > + dev = devm_kzalloc(&client->dev, sizeof(*dev), GFP_KERNEL); > + if (!dev) { > + ret = -ENOMEM; > + goto err; > + } > + > + fe = pdata->dvb_frontend; > + dev->config.i2c_address = client->addr; > + dev->config.clock_out = pdata->clock_out; > + dev->cfg = &dev->config; > + dev->i2c = client->adapter; > + dev->if1_freq = pdata->if1 ? pdata->if1 : 1220; > + dev->client = client; > + > + ret = mt2060_readreg(dev, REG_PART_REV, &chip_id); > + if (ret) { > + ret = -ENODEV; > + goto err; > + } > + > + dev_dbg(&client->dev, "chip id=%02x\n", chip_id); > + > + if (chip_id != PART_REV) { > + ret = -ENODEV; > + goto err; > + } > + > + dev_info(&client->dev, "Microtune MT2060 successfully identified\n"); > + memcpy(&fe->ops.tuner_ops, &mt2060_tuner_ops, sizeof(fe->ops.tuner_ops)); > + fe->ops.tuner_ops.release = NULL; > + fe->tuner_priv = dev; > + i2c_set_clientdata(client, dev); > + > + mt2060_calibrate(dev); > + > + return 0; > +err: > + dev_dbg(&client->dev, "failed=%d\n", ret); > + return ret; > +} > + > +static int mt2060_remove(struct i2c_client *client) > +{ > + dev_dbg(&client->dev, "\n"); > + > + return 0; > +} > + > +static const struct i2c_device_id mt2060_id_table[] = { > + {"mt2060", 0}, > + {} > +}; > +MODULE_DEVICE_TABLE(i2c, mt2060_id_table); > + > +static struct i2c_driver mt2060_driver = { > + .driver = { > + .name = "mt2060", > + .suppress_bind_attrs = true, > + }, > + .probe = mt2060_probe, > + .remove = mt2060_remove, > + .id_table = mt2060_id_table, > +}; > + > +module_i2c_driver(mt2060_driver); > + > MODULE_AUTHOR("Olivier DANET"); > MODULE_DESCRIPTION("Microtune MT2060 silicon tuner driver"); > MODULE_LICENSE("GPL"); > diff --git a/drivers/media/tuners/mt2060.h b/drivers/media/tuners/mt2060.h > index 6efed35..05c0d55 100644 > --- a/drivers/media/tuners/mt2060.h > +++ b/drivers/media/tuners/mt2060.h > @@ -25,6 +25,26 @@ > struct dvb_frontend; > struct i2c_adapter; > > +/* > + * I2C address > + * 0x60, ... > + */ > + > +/** > + * struct mt2060_platform_data - Platform data for the mt2060 driver > + * @clock_out: Clock output setting. 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1. > + * @if1: First IF used [MHz]. 0 defaults to 1220. > + * @dvb_frontend: DVB frontend. > + */ > + > +struct mt2060_platform_data { > + u8 clock_out; > + u16 if1; > + struct dvb_frontend *dvb_frontend; > +}; > + > + > +/* configuration struct for mt2060_attach() */ > struct mt2060_config { > u8 i2c_address; > u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */ > diff --git a/drivers/media/tuners/mt2060_priv.h b/drivers/media/tuners/mt2060_priv.h > index 2b60de6..dfc4a06 100644 > --- a/drivers/media/tuners/mt2060_priv.h > +++ b/drivers/media/tuners/mt2060_priv.h > @@ -95,6 +95,8 @@ > struct mt2060_priv { > struct mt2060_config *cfg; > struct i2c_adapter *i2c; > + struct i2c_client *client; > + struct mt2060_config config; > > u32 frequency; > u16 if1_freq; -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 11/18/2015 05:01 PM, Mauro Carvalho Chehab wrote: > Em Mon, 27 Jul 2015 14:22:05 +0300 > Antti Palosaari <crope@iki.fi> escreveu: > >> Add proper i2c driver model bindings. > > Hi Antti, > > What's the status of this patch series? You submitted them on July, but > never sent me a pull request... I noticed I2C adapter has nowadays (or has it been always there) some configuration logic for I2C message sizes (see struct i2c_adapter_quirks). I would like to test those, which means I have to make some changes to these patches in order to implement message splitting way I2C core supports. Whole thing is for for ZyDAS ZD1301 DVB-T chip driver related, which is ~10 years old and near zero users nowadays - so no need to hurry at all :D regards Antti
Em Wed, 18 Nov 2015 19:49:08 +0200 Antti Palosaari <crope@iki.fi> escreveu: > On 11/18/2015 05:01 PM, Mauro Carvalho Chehab wrote: > > Em Mon, 27 Jul 2015 14:22:05 +0300 > > Antti Palosaari <crope@iki.fi> escreveu: > > > >> Add proper i2c driver model bindings. > > > > Hi Antti, > > > > What's the status of this patch series? You submitted them on July, but > > never sent me a pull request... > > I noticed I2C adapter has nowadays (or has it been always there) some > configuration logic for I2C message sizes (see struct > i2c_adapter_quirks). I would like to test those, which means I have to > make some changes to these patches in order to implement message > splitting way I2C core supports. > > Whole thing is for for ZyDAS ZD1301 DVB-T chip driver related, which is > ~10 years old and near zero users nowadays - so no need to hurry at all :D OK! I'll mark those patches as RFC. Regards, Mauro -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/tuners/mt2060.c b/drivers/media/tuners/mt2060.c index b87b254..aa8280a 100644 --- a/drivers/media/tuners/mt2060.c +++ b/drivers/media/tuners/mt2060.c @@ -397,6 +397,89 @@ struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter } EXPORT_SYMBOL(mt2060_attach); +static int mt2060_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct mt2060_platform_data *pdata = client->dev.platform_data; + struct dvb_frontend *fe; + struct mt2060_priv *dev; + int ret; + u8 chip_id; + + dev_dbg(&client->dev, "\n"); + + if (!pdata) { + dev_err(&client->dev, "Cannot proceed without platform data\n"); + ret = -EINVAL; + goto err; + } + + dev = devm_kzalloc(&client->dev, sizeof(*dev), GFP_KERNEL); + if (!dev) { + ret = -ENOMEM; + goto err; + } + + fe = pdata->dvb_frontend; + dev->config.i2c_address = client->addr; + dev->config.clock_out = pdata->clock_out; + dev->cfg = &dev->config; + dev->i2c = client->adapter; + dev->if1_freq = pdata->if1 ? pdata->if1 : 1220; + dev->client = client; + + ret = mt2060_readreg(dev, REG_PART_REV, &chip_id); + if (ret) { + ret = -ENODEV; + goto err; + } + + dev_dbg(&client->dev, "chip id=%02x\n", chip_id); + + if (chip_id != PART_REV) { + ret = -ENODEV; + goto err; + } + + dev_info(&client->dev, "Microtune MT2060 successfully identified\n"); + memcpy(&fe->ops.tuner_ops, &mt2060_tuner_ops, sizeof(fe->ops.tuner_ops)); + fe->ops.tuner_ops.release = NULL; + fe->tuner_priv = dev; + i2c_set_clientdata(client, dev); + + mt2060_calibrate(dev); + + return 0; +err: + dev_dbg(&client->dev, "failed=%d\n", ret); + return ret; +} + +static int mt2060_remove(struct i2c_client *client) +{ + dev_dbg(&client->dev, "\n"); + + return 0; +} + +static const struct i2c_device_id mt2060_id_table[] = { + {"mt2060", 0}, + {} +}; +MODULE_DEVICE_TABLE(i2c, mt2060_id_table); + +static struct i2c_driver mt2060_driver = { + .driver = { + .name = "mt2060", + .suppress_bind_attrs = true, + }, + .probe = mt2060_probe, + .remove = mt2060_remove, + .id_table = mt2060_id_table, +}; + +module_i2c_driver(mt2060_driver); + MODULE_AUTHOR("Olivier DANET"); MODULE_DESCRIPTION("Microtune MT2060 silicon tuner driver"); MODULE_LICENSE("GPL"); diff --git a/drivers/media/tuners/mt2060.h b/drivers/media/tuners/mt2060.h index 6efed35..05c0d55 100644 --- a/drivers/media/tuners/mt2060.h +++ b/drivers/media/tuners/mt2060.h @@ -25,6 +25,26 @@ struct dvb_frontend; struct i2c_adapter; +/* + * I2C address + * 0x60, ... + */ + +/** + * struct mt2060_platform_data - Platform data for the mt2060 driver + * @clock_out: Clock output setting. 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1. + * @if1: First IF used [MHz]. 0 defaults to 1220. + * @dvb_frontend: DVB frontend. + */ + +struct mt2060_platform_data { + u8 clock_out; + u16 if1; + struct dvb_frontend *dvb_frontend; +}; + + +/* configuration struct for mt2060_attach() */ struct mt2060_config { u8 i2c_address; u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */ diff --git a/drivers/media/tuners/mt2060_priv.h b/drivers/media/tuners/mt2060_priv.h index 2b60de6..dfc4a06 100644 --- a/drivers/media/tuners/mt2060_priv.h +++ b/drivers/media/tuners/mt2060_priv.h @@ -95,6 +95,8 @@ struct mt2060_priv { struct mt2060_config *cfg; struct i2c_adapter *i2c; + struct i2c_client *client; + struct mt2060_config config; u32 frequency; u16 if1_freq;
Add proper i2c driver model bindings. Signed-off-by: Antti Palosaari <crope@iki.fi> --- drivers/media/tuners/mt2060.c | 83 ++++++++++++++++++++++++++++++++++++++ drivers/media/tuners/mt2060.h | 20 +++++++++ drivers/media/tuners/mt2060_priv.h | 2 + 3 files changed, 105 insertions(+)