Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] it913x: change driver model from i2c to platform

That tuner is integrated to demodulator and communicates via
demodulators address space. We cannot register both demodulator
and tuner having same address to same I2C bus, so better to change
it platform driver in order to implement I2C adapter correctly.

Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>

authored by

Antti Palosaari and committed by
Mauro Carvalho Chehab
675ee801 3461831a

+48 -70
+36 -53
drivers/media/tuners/it913x.c
··· 17 17 */ 18 18 19 19 #include "it913x.h" 20 + #include <linux/platform_device.h> 20 21 #include <linux/regmap.h> 21 22 22 23 struct it913x_dev { 23 - struct i2c_client *client; 24 + struct platform_device *pdev; 24 25 struct regmap *regmap; 25 26 struct dvb_frontend *fe; 26 27 u8 chip_ver:2; ··· 36 35 static int it913x_init(struct dvb_frontend *fe) 37 36 { 38 37 struct it913x_dev *dev = fe->tuner_priv; 38 + struct platform_device *pdev = dev->pdev; 39 39 int ret; 40 40 unsigned int utmp; 41 41 u8 iqik_m_cal, nv_val, buf[2]; 42 42 static const u8 nv[] = {48, 32, 24, 16, 12, 8, 6, 4, 2}; 43 43 unsigned long timeout; 44 44 45 - dev_dbg(&dev->client->dev, "role %u\n", dev->role); 45 + dev_dbg(&pdev->dev, "role %u\n", dev->role); 46 46 47 47 ret = regmap_write(dev->regmap, 0x80ec4c, 0x68); 48 48 if (ret) ··· 71 69 iqik_m_cal = 6; 72 70 break; 73 71 default: 74 - dev_err(&dev->client->dev, "unknown clock identifier %d\n", utmp); 72 + dev_err(&pdev->dev, "unknown clock identifier %d\n", utmp); 75 73 goto err; 76 74 } 77 75 ··· 96 94 break; 97 95 } 98 96 99 - dev_dbg(&dev->client->dev, "r_fbc_m_bdry took %u ms, val %u\n", 97 + dev_dbg(&pdev->dev, "r_fbc_m_bdry took %u ms, val %u\n", 100 98 jiffies_to_msecs(jiffies) - 101 99 (jiffies_to_msecs(timeout) - TIMEOUT), utmp); 102 100 103 101 dev->fn_min = dev->xtal * utmp; 104 102 dev->fn_min /= (dev->fdiv * nv_val); 105 103 dev->fn_min *= 1000; 106 - dev_dbg(&dev->client->dev, "fn_min %u\n", dev->fn_min); 104 + dev_dbg(&pdev->dev, "fn_min %u\n", dev->fn_min); 107 105 108 106 /* 109 107 * Chip version BX never sets that flag so we just wait 50ms in that ··· 123 121 break; 124 122 } 125 123 126 - dev_dbg(&dev->client->dev, "p_tsm_init_mode took %u ms, val %u\n", 124 + dev_dbg(&pdev->dev, "p_tsm_init_mode took %u ms, val %u\n", 127 125 jiffies_to_msecs(jiffies) - 128 126 (jiffies_to_msecs(timeout) - TIMEOUT), utmp); 129 127 } else { ··· 150 148 151 149 return 0; 152 150 err: 153 - dev_dbg(&dev->client->dev, "failed %d\n", ret); 151 + dev_dbg(&pdev->dev, "failed %d\n", ret); 154 152 return ret; 155 153 } 156 154 157 155 static int it913x_sleep(struct dvb_frontend *fe) 158 156 { 159 157 struct it913x_dev *dev = fe->tuner_priv; 158 + struct platform_device *pdev = dev->pdev; 160 159 int ret, len; 161 160 162 - dev_dbg(&dev->client->dev, "role %u\n", dev->role); 161 + dev_dbg(&pdev->dev, "role %u\n", dev->role); 163 162 164 163 dev->active = false; 165 164 ··· 177 174 else 178 175 len = 15; 179 176 180 - dev_dbg(&dev->client->dev, "role %u, len %d\n", dev->role, len); 177 + dev_dbg(&pdev->dev, "role %u, len %d\n", dev->role, len); 181 178 182 179 ret = regmap_bulk_write(dev->regmap, 0x80ec02, 183 180 "\x3f\x1f\x3f\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", ··· 209 206 210 207 return 0; 211 208 err: 212 - dev_dbg(&dev->client->dev, "failed %d\n", ret); 209 + dev_dbg(&pdev->dev, "failed %d\n", ret); 213 210 return ret; 214 211 } 215 212 216 213 static int it913x_set_params(struct dvb_frontend *fe) 217 214 { 218 215 struct it913x_dev *dev = fe->tuner_priv; 216 + struct platform_device *pdev = dev->pdev; 219 217 struct dtv_frontend_properties *c = &fe->dtv_property_cache; 220 218 int ret; 221 219 unsigned int utmp; ··· 224 220 u16 iqik_m_cal, n_div; 225 221 u8 u8tmp, n, l_band, lna_band; 226 222 227 - dev_dbg(&dev->client->dev, "role=%u, frequency %u, bandwidth_hz %u\n", 223 + dev_dbg(&pdev->dev, "role=%u, frequency %u, bandwidth_hz %u\n", 228 224 dev->role, c->frequency, c->bandwidth_hz); 229 225 230 226 if (!dev->active) { ··· 290 286 pre_lo_freq += (u32) n << 13; 291 287 /* Frequency OMEGA_IQIK_M_CAL_MID*/ 292 288 t_cal_freq = pre_lo_freq + (u32)iqik_m_cal; 293 - dev_dbg(&dev->client->dev, "t_cal_freq %u, pre_lo_freq %u\n", 289 + dev_dbg(&pdev->dev, "t_cal_freq %u, pre_lo_freq %u\n", 294 290 t_cal_freq, pre_lo_freq); 295 291 296 292 if (c->frequency <= 440000000) { ··· 369 365 370 366 return 0; 371 367 err: 372 - dev_dbg(&dev->client->dev, "failed %d\n", ret); 368 + dev_dbg(&pdev->dev, "failed %d\n", ret); 373 369 return ret; 374 370 } 375 371 ··· 385 381 .set_params = it913x_set_params, 386 382 }; 387 383 388 - static int it913x_probe(struct i2c_client *client, 389 - const struct i2c_device_id *id) 384 + static int it913x_probe(struct platform_device *pdev) 390 385 { 391 - struct it913x_config *cfg = client->dev.platform_data; 392 - struct dvb_frontend *fe = cfg->fe; 386 + struct it913x_platform_data *pdata = pdev->dev.platform_data; 387 + struct dvb_frontend *fe = pdata->fe; 393 388 struct it913x_dev *dev; 394 389 int ret; 395 390 char *chip_ver_str; 396 - static const struct regmap_config regmap_config = { 397 - .reg_bits = 24, 398 - .val_bits = 8, 399 - }; 400 391 401 392 dev = kzalloc(sizeof(struct it913x_dev), GFP_KERNEL); 402 393 if (dev == NULL) { 403 394 ret = -ENOMEM; 404 - dev_err(&client->dev, "kzalloc() failed\n"); 395 + dev_err(&pdev->dev, "kzalloc() failed\n"); 405 396 goto err; 406 397 } 407 398 408 - dev->client = client; 409 - dev->fe = cfg->fe; 410 - dev->chip_ver = cfg->chip_ver; 411 - dev->role = cfg->role; 412 - dev->regmap = regmap_init_i2c(client, &regmap_config); 413 - if (IS_ERR(dev->regmap)) { 414 - ret = PTR_ERR(dev->regmap); 415 - goto err_kfree; 416 - } 399 + dev->pdev = pdev; 400 + dev->regmap = pdata->regmap; 401 + dev->fe = pdata->fe; 402 + dev->chip_ver = pdata->chip_ver; 403 + dev->role = pdata->role; 417 404 418 405 fe->tuner_priv = dev; 419 406 memcpy(&fe->ops.tuner_ops, &it913x_tuner_ops, 420 407 sizeof(struct dvb_tuner_ops)); 421 - i2c_set_clientdata(client, dev); 408 + platform_set_drvdata(pdev, dev); 422 409 423 410 if (dev->chip_ver == 1) 424 411 chip_ver_str = "AX"; ··· 418 423 else 419 424 chip_ver_str = "??"; 420 425 421 - dev_info(&dev->client->dev, "ITE IT913X %s successfully attached\n", 422 - chip_ver_str); 423 - dev_dbg(&dev->client->dev, "chip_ver %u, role %u\n", 424 - dev->chip_ver, dev->role); 426 + dev_info(&pdev->dev, "ITE IT913X %s successfully attached\n", 427 + chip_ver_str); 428 + dev_dbg(&pdev->dev, "chip_ver %u, role %u\n", dev->chip_ver, dev->role); 425 429 return 0; 426 - 427 - err_kfree: 428 - kfree(dev); 429 430 err: 430 - dev_dbg(&client->dev, "failed %d\n", ret); 431 + dev_dbg(&pdev->dev, "failed %d\n", ret); 431 432 return ret; 432 433 } 433 434 434 - static int it913x_remove(struct i2c_client *client) 435 + static int it913x_remove(struct platform_device *pdev) 435 436 { 436 - struct it913x_dev *dev = i2c_get_clientdata(client); 437 + struct it913x_dev *dev = platform_get_drvdata(pdev); 437 438 struct dvb_frontend *fe = dev->fe; 438 439 439 - dev_dbg(&client->dev, "\n"); 440 + dev_dbg(&pdev->dev, "\n"); 440 441 441 442 memset(&fe->ops.tuner_ops, 0, sizeof(struct dvb_tuner_ops)); 442 443 fe->tuner_priv = NULL; 443 - regmap_exit(dev->regmap); 444 444 kfree(dev); 445 445 446 446 return 0; 447 447 } 448 448 449 - static const struct i2c_device_id it913x_id_table[] = { 450 - {"it913x", 0}, 451 - {} 452 - }; 453 - MODULE_DEVICE_TABLE(i2c, it913x_id_table); 454 - 455 - static struct i2c_driver it913x_driver = { 449 + static struct platform_driver it913x_driver = { 456 450 .driver = { 457 451 .name = "it913x", 458 452 .suppress_bind_attrs = true, 459 453 }, 460 454 .probe = it913x_probe, 461 455 .remove = it913x_remove, 462 - .id_table = it913x_id_table, 463 456 }; 464 457 465 - module_i2c_driver(it913x_driver); 458 + module_platform_driver(it913x_driver); 466 459 467 460 MODULE_DESCRIPTION("ITE IT913X silicon tuner driver"); 468 461 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
+12 -17
drivers/media/tuners/it913x.h
··· 21 21 22 22 #include "dvb_frontend.h" 23 23 24 - /* 25 - * I2C address 26 - * 0x38, 0x3a, 0x3c, 0x3e 24 + /** 25 + * struct it913x_platform_data - Platform data for the it913x driver 26 + * @regmap: af9033 demod driver regmap. 27 + * @dvb_frontend: af9033 demod driver DVB frontend. 28 + * @chip_ver: Used chip version. 1=IT9133 AX, 2=IT9133 BX. 29 + * @role: Chip role, single or dual configuration. 27 30 */ 28 - struct it913x_config { 29 - /* 30 - * pointer to DVB frontend 31 - */ 31 + 32 + struct it913x_platform_data { 33 + struct regmap *regmap; 32 34 struct dvb_frontend *fe; 33 - 34 - /* 35 - * chip version 36 - * 1 = IT9135 AX 37 - * 2 = IT9135 BX 38 - */ 39 35 unsigned int chip_ver:2; 40 - 41 - /* 42 - * tuner role 43 - */ 44 36 #define IT913X_ROLE_SINGLE 0 45 37 #define IT913X_ROLE_DUAL_MASTER 1 46 38 #define IT913X_ROLE_DUAL_SLAVE 2 47 39 unsigned int role:2; 48 40 }; 41 + 42 + /* Backwards compatibility */ 43 + #define it913x_config it913x_platform_data 49 44 50 45 #endif