diff options
Diffstat (limited to 'drivers/media/tuners/it913x.c')
-rw-r--r-- | drivers/media/tuners/it913x.c | 96 |
1 files changed, 42 insertions, 54 deletions
diff --git a/drivers/media/tuners/it913x.c b/drivers/media/tuners/it913x.c index 6c3ef2181fcd..27e5bc1c3cb5 100644 --- a/drivers/media/tuners/it913x.c +++ b/drivers/media/tuners/it913x.c @@ -14,17 +14,14 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.= */ #include "it913x.h" +#include <linux/platform_device.h> #include <linux/regmap.h> struct it913x_dev { - struct i2c_client *client; + struct platform_device *pdev; struct regmap *regmap; struct dvb_frontend *fe; u8 chip_ver:2; @@ -39,13 +36,14 @@ struct it913x_dev { static int it913x_init(struct dvb_frontend *fe) { struct it913x_dev *dev = fe->tuner_priv; + struct platform_device *pdev = dev->pdev; int ret; unsigned int utmp; u8 iqik_m_cal, nv_val, buf[2]; static const u8 nv[] = {48, 32, 24, 16, 12, 8, 6, 4, 2}; unsigned long timeout; - dev_dbg(&dev->client->dev, "role %u\n", dev->role); + dev_dbg(&pdev->dev, "role %u\n", dev->role); ret = regmap_write(dev->regmap, 0x80ec4c, 0x68); if (ret) @@ -73,7 +71,7 @@ static int it913x_init(struct dvb_frontend *fe) iqik_m_cal = 6; break; default: - dev_err(&dev->client->dev, "unknown clock identifier %d\n", utmp); + dev_err(&pdev->dev, "unknown clock identifier %d\n", utmp); goto err; } @@ -98,14 +96,14 @@ static int it913x_init(struct dvb_frontend *fe) break; } - dev_dbg(&dev->client->dev, "r_fbc_m_bdry took %u ms, val %u\n", + dev_dbg(&pdev->dev, "r_fbc_m_bdry took %u ms, val %u\n", jiffies_to_msecs(jiffies) - (jiffies_to_msecs(timeout) - TIMEOUT), utmp); dev->fn_min = dev->xtal * utmp; dev->fn_min /= (dev->fdiv * nv_val); dev->fn_min *= 1000; - dev_dbg(&dev->client->dev, "fn_min %u\n", dev->fn_min); + dev_dbg(&pdev->dev, "fn_min %u\n", dev->fn_min); /* * Chip version BX never sets that flag so we just wait 50ms in that @@ -125,7 +123,7 @@ static int it913x_init(struct dvb_frontend *fe) break; } - dev_dbg(&dev->client->dev, "p_tsm_init_mode took %u ms, val %u\n", + dev_dbg(&pdev->dev, "p_tsm_init_mode took %u ms, val %u\n", jiffies_to_msecs(jiffies) - (jiffies_to_msecs(timeout) - TIMEOUT), utmp); } else { @@ -152,16 +150,17 @@ static int it913x_init(struct dvb_frontend *fe) return 0; err: - dev_dbg(&dev->client->dev, "failed %d\n", ret); + dev_dbg(&pdev->dev, "failed %d\n", ret); return ret; } static int it913x_sleep(struct dvb_frontend *fe) { struct it913x_dev *dev = fe->tuner_priv; + struct platform_device *pdev = dev->pdev; int ret, len; - dev_dbg(&dev->client->dev, "role %u\n", dev->role); + dev_dbg(&pdev->dev, "role %u\n", dev->role); dev->active = false; @@ -178,7 +177,7 @@ static int it913x_sleep(struct dvb_frontend *fe) else len = 15; - dev_dbg(&dev->client->dev, "role %u, len %d\n", dev->role, len); + dev_dbg(&pdev->dev, "role %u, len %d\n", dev->role, len); ret = regmap_bulk_write(dev->regmap, 0x80ec02, "\x3f\x1f\x3f\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", @@ -210,13 +209,14 @@ static int it913x_sleep(struct dvb_frontend *fe) return 0; err: - dev_dbg(&dev->client->dev, "failed %d\n", ret); + dev_dbg(&pdev->dev, "failed %d\n", ret); return ret; } static int it913x_set_params(struct dvb_frontend *fe) { struct it913x_dev *dev = fe->tuner_priv; + struct platform_device *pdev = dev->pdev; struct dtv_frontend_properties *c = &fe->dtv_property_cache; int ret; unsigned int utmp; @@ -224,7 +224,7 @@ static int it913x_set_params(struct dvb_frontend *fe) u16 iqik_m_cal, n_div; u8 u8tmp, n, l_band, lna_band; - dev_dbg(&dev->client->dev, "role=%u, frequency %u, bandwidth_hz %u\n", + dev_dbg(&pdev->dev, "role=%u, frequency %u, bandwidth_hz %u\n", dev->role, c->frequency, c->bandwidth_hz); if (!dev->active) { @@ -290,7 +290,7 @@ static int it913x_set_params(struct dvb_frontend *fe) pre_lo_freq += (u32) n << 13; /* Frequency OMEGA_IQIK_M_CAL_MID*/ t_cal_freq = pre_lo_freq + (u32)iqik_m_cal; - dev_dbg(&dev->client->dev, "t_cal_freq %u, pre_lo_freq %u\n", + dev_dbg(&pdev->dev, "t_cal_freq %u, pre_lo_freq %u\n", t_cal_freq, pre_lo_freq); if (c->frequency <= 440000000) { @@ -369,7 +369,7 @@ static int it913x_set_params(struct dvb_frontend *fe) return 0; err: - dev_dbg(&dev->client->dev, "failed %d\n", ret); + dev_dbg(&pdev->dev, "failed %d\n", ret); return ret; } @@ -385,40 +385,32 @@ static const struct dvb_tuner_ops it913x_tuner_ops = { .set_params = it913x_set_params, }; -static int it913x_probe(struct i2c_client *client, - const struct i2c_device_id *id) +static int it913x_probe(struct platform_device *pdev) { - struct it913x_config *cfg = client->dev.platform_data; - struct dvb_frontend *fe = cfg->fe; + struct it913x_platform_data *pdata = pdev->dev.platform_data; + struct dvb_frontend *fe = pdata->fe; struct it913x_dev *dev; + const struct platform_device_id *id = platform_get_device_id(pdev); int ret; char *chip_ver_str; - static const struct regmap_config regmap_config = { - .reg_bits = 24, - .val_bits = 8, - }; dev = kzalloc(sizeof(struct it913x_dev), GFP_KERNEL); if (dev == NULL) { ret = -ENOMEM; - dev_err(&client->dev, "kzalloc() failed\n"); + dev_err(&pdev->dev, "kzalloc() failed\n"); goto err; } - dev->client = client; - dev->fe = cfg->fe; - dev->chip_ver = cfg->chip_ver; - dev->role = cfg->role; - dev->regmap = regmap_init_i2c(client, ®map_config); - if (IS_ERR(dev->regmap)) { - ret = PTR_ERR(dev->regmap); - goto err_kfree; - } + dev->pdev = pdev; + dev->regmap = pdata->regmap; + dev->fe = pdata->fe; + dev->chip_ver = id->driver_data; + dev->role = pdata->role; fe->tuner_priv = dev; memcpy(&fe->ops.tuner_ops, &it913x_tuner_ops, sizeof(struct dvb_tuner_ops)); - i2c_set_clientdata(client, dev); + platform_set_drvdata(pdev, dev); if (dev->chip_ver == 1) chip_ver_str = "AX"; @@ -427,41 +419,37 @@ static int it913x_probe(struct i2c_client *client, else chip_ver_str = "??"; - dev_info(&dev->client->dev, "ITE IT913X %s successfully attached\n", - chip_ver_str); - dev_dbg(&dev->client->dev, "chip_ver %u, role %u\n", - dev->chip_ver, dev->role); + dev_info(&pdev->dev, "ITE IT913X %s successfully attached\n", + chip_ver_str); + dev_dbg(&pdev->dev, "chip_ver %u, role %u\n", dev->chip_ver, dev->role); return 0; - -err_kfree: - kfree(dev); err: - dev_dbg(&client->dev, "failed %d\n", ret); + dev_dbg(&pdev->dev, "failed %d\n", ret); return ret; } -static int it913x_remove(struct i2c_client *client) +static int it913x_remove(struct platform_device *pdev) { - struct it913x_dev *dev = i2c_get_clientdata(client); + struct it913x_dev *dev = platform_get_drvdata(pdev); struct dvb_frontend *fe = dev->fe; - dev_dbg(&client->dev, "\n"); + dev_dbg(&pdev->dev, "\n"); memset(&fe->ops.tuner_ops, 0, sizeof(struct dvb_tuner_ops)); fe->tuner_priv = NULL; - regmap_exit(dev->regmap); kfree(dev); return 0; } -static const struct i2c_device_id it913x_id_table[] = { - {"it913x", 0}, - {} +static const struct platform_device_id it913x_id_table[] = { + {"it9133ax-tuner", 1}, + {"it9133bx-tuner", 2}, + {}, }; -MODULE_DEVICE_TABLE(i2c, it913x_id_table); +MODULE_DEVICE_TABLE(platform, it913x_id_table); -static struct i2c_driver it913x_driver = { +static struct platform_driver it913x_driver = { .driver = { .name = "it913x", .suppress_bind_attrs = true, @@ -471,7 +459,7 @@ static struct i2c_driver it913x_driver = { .id_table = it913x_id_table, }; -module_i2c_driver(it913x_driver); +module_platform_driver(it913x_driver); MODULE_DESCRIPTION("ITE IT913X silicon tuner driver"); MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); |