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

[media] tua9001: use regmap for I2C register access

Use regmap for I2C register access.

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

authored by

Antti Palosaari and committed by
Mauro Carvalho Chehab
dd219a87 465433fa

+15 -29
+1
drivers/media/tuners/Kconfig
··· 236 236 config MEDIA_TUNER_TUA9001 237 237 tristate "Infineon TUA9001 silicon tuner" 238 238 depends on MEDIA_SUPPORT && I2C 239 + select REGMAP_I2C 239 240 default m if !MEDIA_SUBDRV_AUTOSELECT 240 241 help 241 242 Infineon TUA 9001 silicon tuner driver.
+12 -29
drivers/media/tuners/tua9001.c
··· 16 16 17 17 #include "tua9001_priv.h" 18 18 19 - /* write register */ 20 - static int tua9001_wr_reg(struct tua9001_dev *dev, u8 reg, u16 val) 21 - { 22 - struct i2c_client *client = dev->client; 23 - int ret; 24 - u8 buf[3] = { reg, (val >> 8) & 0xff, (val >> 0) & 0xff }; 25 - struct i2c_msg msg[1] = { 26 - { 27 - .addr = client->addr, 28 - .flags = 0, 29 - .len = sizeof(buf), 30 - .buf = buf, 31 - } 32 - }; 33 - 34 - ret = i2c_transfer(client->adapter, msg, 1); 35 - if (ret == 1) { 36 - ret = 0; 37 - } else { 38 - dev_warn(&client->dev, "i2c wr failed=%d reg=%02x\n", ret, reg); 39 - ret = -EREMOTEIO; 40 - } 41 - 42 - return ret; 43 - } 44 - 45 19 static int tua9001_init(struct dvb_frontend *fe) 46 20 { 47 21 struct tua9001_dev *dev = fe->tuner_priv; ··· 50 76 } 51 77 52 78 for (i = 0; i < ARRAY_SIZE(data); i++) { 53 - ret = tua9001_wr_reg(dev, data[i].reg, data[i].val); 79 + ret = regmap_write(dev->regmap, data[i].reg, data[i].val); 54 80 if (ret) 55 81 goto err; 56 82 } ··· 140 166 } 141 167 142 168 for (i = 0; i < ARRAY_SIZE(data); i++) { 143 - ret = tua9001_wr_reg(dev, data[i].reg, data[i].val); 169 + ret = regmap_write(dev->regmap, data[i].reg, data[i].val); 144 170 if (ret) 145 171 goto err; 146 172 } ··· 190 216 struct tua9001_platform_data *pdata = client->dev.platform_data; 191 217 struct dvb_frontend *fe = pdata->dvb_frontend; 192 218 int ret; 219 + static const struct regmap_config regmap_config = { 220 + .reg_bits = 8, 221 + .val_bits = 16, 222 + }; 193 223 194 224 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 195 225 if (!dev) { ··· 201 223 goto err; 202 224 } 203 225 204 - dev->client = client; 205 226 dev->fe = pdata->dvb_frontend; 227 + dev->client = client; 228 + dev->regmap = devm_regmap_init_i2c(client, &regmap_config); 229 + if (IS_ERR(dev->regmap)) { 230 + ret = PTR_ERR(dev->regmap); 231 + goto err_kfree; 232 + } 206 233 207 234 if (fe->callback) { 208 235 ret = fe->callback(client->adapter,
+2
drivers/media/tuners/tua9001_priv.h
··· 18 18 #define TUA9001_PRIV_H 19 19 20 20 #include "tua9001.h" 21 + #include <linux/regmap.h> 21 22 22 23 struct tua9001_reg_val { 23 24 u8 reg; ··· 28 27 struct tua9001_dev { 29 28 struct dvb_frontend *fe; 30 29 struct i2c_client *client; 30 + struct regmap *regmap; 31 31 }; 32 32 33 33 #endif