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

[media] af9013: convert to regmap api

Use regmap for register access. Own low level i2c read and write
routines for regmap is still needed because chip uses single command
byte in addition to typical i2c register access.

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
f458a1bc cbb2a299

+294 -306
+1
drivers/media/dvb-frontends/Kconfig
··· 436 436 config DVB_AF9013 437 437 tristate "Afatech AF9013 demodulator" 438 438 depends on DVB_CORE && I2C 439 + select REGMAP 439 440 default m if !MEDIA_SUBDRV_AUTOSELECT 440 441 help 441 442 Say Y when you want to support this frontend.
+292 -306
drivers/media/dvb-frontends/af9013.c
··· 20 20 21 21 #include "af9013_priv.h" 22 22 23 - /* Max transfer size done by I2C transfer functions */ 24 - #define MAX_XFER_SIZE 64 25 - 26 23 struct af9013_state { 27 24 struct i2c_client *client; 25 + struct regmap *regmap; 28 26 struct dvb_frontend fe; 29 27 u32 clk; 30 28 u8 tuner; ··· 47 49 unsigned int statistics_step:3; 48 50 struct delayed_work statistics_work; 49 51 }; 50 - 51 - /* write multiple registers */ 52 - static int af9013_wr_regs_i2c(struct af9013_state *state, u8 mbox, u16 reg, 53 - const u8 *val, int len) 54 - { 55 - struct i2c_client *client = state->client; 56 - int ret; 57 - u8 buf[MAX_XFER_SIZE]; 58 - struct i2c_msg msg[1] = { 59 - { 60 - .addr = state->client->addr, 61 - .flags = 0, 62 - .len = 3 + len, 63 - .buf = buf, 64 - } 65 - }; 66 - 67 - if (3 + len > sizeof(buf)) { 68 - dev_warn(&client->dev, "i2c wr reg %04x, len %d, is too big!\n", 69 - reg, len); 70 - return -EINVAL; 71 - } 72 - 73 - buf[0] = (reg >> 8) & 0xff; 74 - buf[1] = (reg >> 0) & 0xff; 75 - buf[2] = mbox; 76 - memcpy(&buf[3], val, len); 77 - 78 - ret = i2c_transfer(state->client->adapter, msg, 1); 79 - if (ret == 1) { 80 - ret = 0; 81 - } else { 82 - dev_warn(&client->dev, "i2c wr failed %d, reg %04x, len %d\n", 83 - ret, reg, len); 84 - ret = -EREMOTEIO; 85 - } 86 - return ret; 87 - } 88 - 89 - /* read multiple registers */ 90 - static int af9013_rd_regs_i2c(struct af9013_state *state, u8 mbox, u16 reg, 91 - u8 *val, int len) 92 - { 93 - struct i2c_client *client = state->client; 94 - int ret; 95 - u8 buf[3]; 96 - struct i2c_msg msg[2] = { 97 - { 98 - .addr = state->client->addr, 99 - .flags = 0, 100 - .len = 3, 101 - .buf = buf, 102 - }, { 103 - .addr = state->client->addr, 104 - .flags = I2C_M_RD, 105 - .len = len, 106 - .buf = val, 107 - } 108 - }; 109 - 110 - buf[0] = (reg >> 8) & 0xff; 111 - buf[1] = (reg >> 0) & 0xff; 112 - buf[2] = mbox; 113 - 114 - ret = i2c_transfer(state->client->adapter, msg, 2); 115 - if (ret == 2) { 116 - ret = 0; 117 - } else { 118 - dev_warn(&client->dev, "i2c rd failed %d, reg %04x, len %d\n", 119 - ret, reg, len); 120 - ret = -EREMOTEIO; 121 - } 122 - return ret; 123 - } 124 - 125 - /* write multiple registers */ 126 - static int af9013_wr_regs(struct af9013_state *state, u16 reg, const u8 *val, 127 - int len) 128 - { 129 - int ret, i; 130 - u8 mbox = (0 << 7)|(0 << 6)|(1 << 1)|(1 << 0); 131 - 132 - if ((state->ts_mode == AF9013_TS_USB) && 133 - ((reg & 0xff00) != 0xff00) && ((reg & 0xff00) != 0xae00)) { 134 - mbox |= ((len - 1) << 2); 135 - ret = af9013_wr_regs_i2c(state, mbox, reg, val, len); 136 - } else { 137 - for (i = 0; i < len; i++) { 138 - ret = af9013_wr_regs_i2c(state, mbox, reg+i, val+i, 1); 139 - if (ret) 140 - goto err; 141 - } 142 - } 143 - 144 - err: 145 - return 0; 146 - } 147 - 148 - /* read multiple registers */ 149 - static int af9013_rd_regs(struct af9013_state *state, u16 reg, u8 *val, int len) 150 - { 151 - int ret, i; 152 - u8 mbox = (0 << 7)|(0 << 6)|(1 << 1)|(0 << 0); 153 - 154 - if ((state->ts_mode == AF9013_TS_USB) && 155 - ((reg & 0xff00) != 0xff00) && ((reg & 0xff00) != 0xae00)) { 156 - mbox |= ((len - 1) << 2); 157 - ret = af9013_rd_regs_i2c(state, mbox, reg, val, len); 158 - } else { 159 - for (i = 0; i < len; i++) { 160 - ret = af9013_rd_regs_i2c(state, mbox, reg+i, val+i, 1); 161 - if (ret) 162 - goto err; 163 - } 164 - } 165 - 166 - err: 167 - return 0; 168 - } 169 - 170 - /* write single register */ 171 - static int af9013_wr_reg(struct af9013_state *state, u16 reg, u8 val) 172 - { 173 - return af9013_wr_regs(state, reg, &val, 1); 174 - } 175 - 176 - /* read single register */ 177 - static int af9013_rd_reg(struct af9013_state *state, u16 reg, u8 *val) 178 - { 179 - return af9013_rd_regs(state, reg, val, 1); 180 - } 181 - 182 - static int af9013_write_ofsm_regs(struct af9013_state *state, u16 reg, u8 *val, 183 - u8 len) 184 - { 185 - u8 mbox = (1 << 7)|(1 << 6)|((len - 1) << 2)|(1 << 1)|(1 << 0); 186 - return af9013_wr_regs_i2c(state, mbox, reg, val, len); 187 - } 188 - 189 - static int af9013_wr_reg_bits(struct af9013_state *state, u16 reg, int pos, 190 - int len, u8 val) 191 - { 192 - int ret; 193 - u8 tmp, mask; 194 - 195 - /* no need for read if whole reg is written */ 196 - if (len != 8) { 197 - ret = af9013_rd_reg(state, reg, &tmp); 198 - if (ret) 199 - return ret; 200 - 201 - mask = (0xff >> (8 - len)) << pos; 202 - val <<= pos; 203 - tmp &= ~mask; 204 - val |= tmp; 205 - } 206 - 207 - return af9013_wr_reg(state, reg, val); 208 - } 209 - 210 - static int af9013_rd_reg_bits(struct af9013_state *state, u16 reg, int pos, 211 - int len, u8 *val) 212 - { 213 - int ret; 214 - u8 tmp; 215 - 216 - ret = af9013_rd_reg(state, reg, &tmp); 217 - if (ret) 218 - return ret; 219 - 220 - *val = (tmp >> pos); 221 - *val &= (0xff >> (8 - len)); 222 - 223 - return 0; 224 - } 225 52 226 53 static int af9013_set_gpio(struct af9013_state *state, u8 gpio, u8 gpioval) 227 54 { ··· 89 266 break; 90 267 } 91 268 92 - ret = af9013_wr_reg_bits(state, addr, pos, 4, gpioval); 269 + ret = regmap_update_bits(state->regmap, addr, 0x0f << pos, 270 + gpioval << pos); 93 271 if (ret) 94 272 goto err; 95 273 ··· 103 279 static int af9013_power_ctrl(struct af9013_state *state, u8 onoff) 104 280 { 105 281 struct i2c_client *client = state->client; 106 - int ret, i; 107 - u8 tmp; 282 + int ret; 283 + unsigned int utmp; 108 284 109 285 dev_dbg(&client->dev, "onoff %d\n", onoff); 110 286 111 287 /* enable reset */ 112 - ret = af9013_wr_reg_bits(state, 0xd417, 4, 1, 1); 288 + ret = regmap_update_bits(state->regmap, 0xd417, 0x10, 0x10); 113 289 if (ret) 114 290 goto err; 115 291 116 292 /* start reset mechanism */ 117 - ret = af9013_wr_reg(state, 0xaeff, 1); 293 + ret = regmap_write(state->regmap, 0xaeff, 0x01); 118 294 if (ret) 119 295 goto err; 120 296 121 297 /* wait reset performs */ 122 - for (i = 0; i < 150; i++) { 123 - ret = af9013_rd_reg_bits(state, 0xd417, 1, 1, &tmp); 124 - if (ret) 125 - goto err; 298 + ret = regmap_read_poll_timeout(state->regmap, 0xd417, utmp, 299 + (utmp >> 1) & 0x01, 5000, 1000000); 300 + if (ret) 301 + goto err; 126 302 127 - if (tmp) 128 - break; /* reset done */ 129 - 130 - usleep_range(5000, 25000); 131 - } 132 - 133 - if (!tmp) 303 + if (!((utmp >> 1) & 0x01)) 134 304 return -ETIMEDOUT; 135 305 136 306 if (onoff) { 137 307 /* clear reset */ 138 - ret = af9013_wr_reg_bits(state, 0xd417, 1, 1, 0); 308 + ret = regmap_update_bits(state->regmap, 0xd417, 0x02, 0x00); 139 309 if (ret) 140 310 goto err; 141 - 142 311 /* disable reset */ 143 - ret = af9013_wr_reg_bits(state, 0xd417, 4, 1, 0); 144 - 312 + ret = regmap_update_bits(state->regmap, 0xd417, 0x10, 0x00); 313 + if (ret) 314 + goto err; 145 315 /* power on */ 146 - ret = af9013_wr_reg_bits(state, 0xd73a, 3, 1, 0); 316 + ret = regmap_update_bits(state->regmap, 0xd73a, 0x08, 0x00); 317 + if (ret) 318 + goto err; 147 319 } else { 148 320 /* power off */ 149 - ret = af9013_wr_reg_bits(state, 0xd73a, 3, 1, 1); 321 + ret = regmap_update_bits(state->regmap, 0xd73a, 0x08, 0x08); 322 + if (ret) 323 + goto err; 150 324 } 151 325 152 326 return ret; ··· 162 340 dev_dbg(&client->dev, "\n"); 163 341 164 342 /* reset and start BER counter */ 165 - ret = af9013_wr_reg_bits(state, 0xd391, 4, 1, 1); 343 + ret = regmap_update_bits(state->regmap, 0xd391, 0x10, 0x10); 166 344 if (ret) 167 345 goto err; 168 346 ··· 177 355 struct af9013_state *state = fe->demodulator_priv; 178 356 struct i2c_client *client = state->client; 179 357 int ret; 358 + unsigned int utmp; 180 359 u8 buf[5]; 181 360 182 361 dev_dbg(&client->dev, "\n"); 183 362 184 363 /* check if error bit count is ready */ 185 - ret = af9013_rd_reg_bits(state, 0xd391, 4, 1, &buf[0]); 364 + ret = regmap_read(state->regmap, 0xd391, &utmp); 186 365 if (ret) 187 366 goto err; 188 367 189 - if (!buf[0]) { 368 + if (!((utmp >> 4) & 0x01)) { 190 369 dev_dbg(&client->dev, "not ready\n"); 191 370 return 0; 192 371 } 193 372 194 - ret = af9013_rd_regs(state, 0xd387, buf, 5); 373 + ret = regmap_bulk_read(state->regmap, 0xd387, buf, 5); 195 374 if (ret) 196 375 goto err; 197 376 ··· 214 391 dev_dbg(&client->dev, "\n"); 215 392 216 393 /* start SNR meas */ 217 - ret = af9013_wr_reg_bits(state, 0xd2e1, 3, 1, 1); 394 + ret = regmap_update_bits(state->regmap, 0xd2e1, 0x08, 0x08); 218 395 if (ret) 219 396 goto err; 220 397 ··· 229 406 struct af9013_state *state = fe->demodulator_priv; 230 407 struct i2c_client *client = state->client; 231 408 int ret, i, len; 232 - u8 buf[3], tmp; 409 + unsigned int utmp; 410 + u8 buf[3]; 233 411 u32 snr_val; 234 412 const struct af9013_snr *uninitialized_var(snr_lut); 235 413 236 414 dev_dbg(&client->dev, "\n"); 237 415 238 416 /* check if SNR ready */ 239 - ret = af9013_rd_reg_bits(state, 0xd2e1, 3, 1, &tmp); 417 + ret = regmap_read(state->regmap, 0xd2e1, &utmp); 240 418 if (ret) 241 419 goto err; 242 420 243 - if (!tmp) { 421 + if (!((utmp >> 3) & 0x01)) { 244 422 dev_dbg(&client->dev, "not ready\n"); 245 423 return 0; 246 424 } 247 425 248 426 /* read value */ 249 - ret = af9013_rd_regs(state, 0xd2e3, buf, 3); 427 + ret = regmap_bulk_read(state->regmap, 0xd2e3, buf, 3); 250 428 if (ret) 251 429 goto err; 252 430 253 431 snr_val = (buf[2] << 16) | (buf[1] << 8) | buf[0]; 254 432 255 433 /* read current modulation */ 256 - ret = af9013_rd_reg(state, 0xd3c1, &tmp); 434 + ret = regmap_read(state->regmap, 0xd3c1, &utmp); 257 435 if (ret) 258 436 goto err; 259 437 260 - switch ((tmp >> 6) & 3) { 438 + switch ((utmp >> 6) & 3) { 261 439 case 0: 262 440 len = ARRAY_SIZE(qpsk_snr_lut); 263 441 snr_lut = qpsk_snr_lut; ··· 276 452 } 277 453 278 454 for (i = 0; i < len; i++) { 279 - tmp = snr_lut[i].snr; 455 + utmp = snr_lut[i].snr; 280 456 281 457 if (snr_val < snr_lut[i].val) 282 458 break; 283 459 } 284 - state->snr = tmp * 10; /* dB/10 */ 460 + state->snr = utmp * 10; /* dB/10 */ 285 461 286 462 return ret; 287 463 err: ··· 302 478 if (!state->signal_strength_en) 303 479 return 0; 304 480 305 - ret = af9013_rd_regs(state, 0xd07c, buf, 2); 481 + ret = regmap_bulk_read(state->regmap, 0xd07c, buf, 2); 306 482 if (ret) 307 483 goto err; 308 484 ··· 415 591 if (i == ARRAY_SIZE(coeff_lut)) 416 592 return -EINVAL; 417 593 418 - ret = af9013_wr_regs(state, 0xae00, coeff_lut[i].val, 419 - sizeof(coeff_lut[i].val)); 594 + ret = regmap_bulk_write(state->regmap, 0xae00, coeff_lut[i].val, 595 + sizeof(coeff_lut[i].val)); 420 596 if (ret) 421 597 goto err; 422 598 } ··· 459 635 buf[4] = (freq_cw >> 8) & 0xff; 460 636 buf[5] = (freq_cw >> 16) & 0x7f; 461 637 462 - ret = af9013_wr_regs(state, 0xd140, buf, 3); 638 + ret = regmap_bulk_write(state->regmap, 0xd140, buf, 3); 463 639 if (ret) 464 640 goto err; 465 641 466 - ret = af9013_wr_regs(state, 0x9be7, buf, 6); 642 + ret = regmap_bulk_write(state->regmap, 0x9be7, buf, 6); 467 643 if (ret) 468 644 goto err; 469 645 } 470 646 471 647 /* clear TPS lock flag */ 472 - ret = af9013_wr_reg_bits(state, 0xd330, 3, 1, 1); 648 + ret = regmap_update_bits(state->regmap, 0xd330, 0x08, 0x08); 473 649 if (ret) 474 650 goto err; 475 651 476 652 /* clear MPEG2 lock flag */ 477 - ret = af9013_wr_reg_bits(state, 0xd507, 6, 1, 0); 653 + ret = regmap_update_bits(state->regmap, 0xd507, 0x40, 0x00); 478 654 if (ret) 479 655 goto err; 480 656 481 657 /* empty channel function */ 482 - ret = af9013_wr_reg_bits(state, 0x9bfe, 0, 1, 0); 658 + ret = regmap_update_bits(state->regmap, 0x9bfe, 0x01, 0x00); 483 659 if (ret) 484 660 goto err; 485 661 486 662 /* empty DVB-T channel function */ 487 - ret = af9013_wr_reg_bits(state, 0x9bc2, 0, 1, 0); 663 + ret = regmap_update_bits(state->regmap, 0x9bc2, 0x01, 0x00); 488 664 if (ret) 489 665 goto err; 490 666 ··· 629 805 goto err; 630 806 } 631 807 632 - ret = af9013_wr_regs(state, 0xd3c0, buf, 3); 808 + ret = regmap_bulk_write(state->regmap, 0xd3c0, buf, 3); 633 809 if (ret) 634 810 goto err; 635 811 636 812 if (auto_mode) { 637 813 /* clear easy mode flag */ 638 - ret = af9013_wr_reg(state, 0xaefd, 0); 814 + ret = regmap_write(state->regmap, 0xaefd, 0x00); 639 815 if (ret) 640 816 goto err; 641 817 642 818 dev_dbg(&client->dev, "auto params\n"); 643 819 } else { 644 820 /* set easy mode flag */ 645 - ret = af9013_wr_reg(state, 0xaefd, 1); 821 + ret = regmap_write(state->regmap, 0xaefd, 0x01); 646 822 if (ret) 647 823 goto err; 648 824 649 - ret = af9013_wr_reg(state, 0xaefe, 0); 825 + ret = regmap_write(state->regmap, 0xaefe, 0x00); 650 826 if (ret) 651 827 goto err; 652 828 653 829 dev_dbg(&client->dev, "manual params\n"); 654 830 } 655 831 656 - /* tune */ 657 - ret = af9013_wr_reg(state, 0xffff, 0); 832 + /* Reset FSM */ 833 + ret = regmap_write(state->regmap, 0xffff, 0x00); 658 834 if (ret) 659 835 goto err; 660 836 ··· 678 854 679 855 dev_dbg(&client->dev, "\n"); 680 856 681 - ret = af9013_rd_regs(state, 0xd3c0, buf, 3); 857 + ret = regmap_bulk_read(state->regmap, 0xd3c0, buf, 3); 682 858 if (ret) 683 859 goto err; 684 860 ··· 791 967 struct af9013_state *state = fe->demodulator_priv; 792 968 struct i2c_client *client = state->client; 793 969 int ret; 794 - u8 tmp; 970 + unsigned int utmp; 795 971 796 972 /* 797 973 * Return status from the cache if it is younger than 2000ms with the ··· 809 985 } 810 986 811 987 /* MPEG2 lock */ 812 - ret = af9013_rd_reg_bits(state, 0xd507, 6, 1, &tmp); 988 + ret = regmap_read(state->regmap, 0xd507, &utmp); 813 989 if (ret) 814 990 goto err; 815 991 816 - if (tmp) 992 + if ((utmp >> 6) & 0x01) 817 993 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | 818 994 FE_HAS_SYNC | FE_HAS_LOCK; 819 995 820 996 if (!*status) { 821 997 /* TPS lock */ 822 - ret = af9013_rd_reg_bits(state, 0xd330, 3, 1, &tmp); 998 + ret = regmap_read(state->regmap, 0xd330, &utmp); 823 999 if (ret) 824 1000 goto err; 825 1001 826 - if (tmp) 1002 + if ((utmp >> 3) & 0x01) 827 1003 *status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | 828 1004 FE_HAS_VITERBI; 829 1005 } ··· 870 1046 struct af9013_state *state = fe->demodulator_priv; 871 1047 struct i2c_client *client = state->client; 872 1048 int ret, i, len; 873 - u8 buf[3], tmp; 874 - u32 adc_cw; 1049 + unsigned int utmp; 1050 + u8 buf[3]; 875 1051 const struct af9013_reg_bit *init; 876 1052 877 1053 dev_dbg(&client->dev, "\n"); ··· 882 1058 goto err; 883 1059 884 1060 /* enable ADC */ 885 - ret = af9013_wr_reg(state, 0xd73a, 0xa4); 1061 + ret = regmap_write(state->regmap, 0xd73a, 0xa4); 886 1062 if (ret) 887 1063 goto err; 888 1064 889 1065 /* write API version to firmware */ 890 - ret = af9013_wr_regs(state, 0x9bf2, state->api_version, 4); 1066 + ret = regmap_bulk_write(state->regmap, 0x9bf2, state->api_version, 4); 891 1067 if (ret) 892 1068 goto err; 893 1069 894 1070 /* program ADC control */ 895 1071 switch (state->clk) { 896 1072 case 28800000: /* 28.800 MHz */ 897 - tmp = 0; 1073 + utmp = 0; 898 1074 break; 899 1075 case 20480000: /* 20.480 MHz */ 900 - tmp = 1; 1076 + utmp = 1; 901 1077 break; 902 1078 case 28000000: /* 28.000 MHz */ 903 - tmp = 2; 1079 + utmp = 2; 904 1080 break; 905 1081 case 25000000: /* 25.000 MHz */ 906 - tmp = 3; 1082 + utmp = 3; 907 1083 break; 908 1084 default: 909 1085 ret = -EINVAL; 910 1086 goto err; 911 1087 } 912 1088 913 - adc_cw = div_u64((u64)state->clk * 0x80000, 1000000); 914 - buf[0] = (adc_cw >> 0) & 0xff; 915 - buf[1] = (adc_cw >> 8) & 0xff; 916 - buf[2] = (adc_cw >> 16) & 0xff; 917 - ret = af9013_wr_regs(state, 0xd180, buf, 3); 1089 + ret = regmap_update_bits(state->regmap, 0x9bd2, 0x0f, utmp); 918 1090 if (ret) 919 1091 goto err; 920 1092 921 - ret = af9013_wr_reg_bits(state, 0x9bd2, 0, 4, tmp); 1093 + utmp = div_u64((u64)state->clk * 0x80000, 1000000); 1094 + buf[0] = (utmp >> 0) & 0xff; 1095 + buf[1] = (utmp >> 8) & 0xff; 1096 + buf[2] = (utmp >> 16) & 0xff; 1097 + ret = regmap_bulk_write(state->regmap, 0xd180, buf, 3); 922 1098 if (ret) 923 1099 goto err; 924 1100 925 1101 /* set I2C master clock */ 926 - ret = af9013_wr_reg(state, 0xd416, 0x14); 1102 + ret = regmap_write(state->regmap, 0xd416, 0x14); 927 1103 if (ret) 928 1104 goto err; 929 1105 930 1106 /* set 16 embx */ 931 - ret = af9013_wr_reg_bits(state, 0xd700, 1, 1, 1); 1107 + ret = regmap_update_bits(state->regmap, 0xd700, 0x02, 0x02); 932 1108 if (ret) 933 1109 goto err; 934 1110 935 1111 /* set no trigger */ 936 - ret = af9013_wr_reg_bits(state, 0xd700, 2, 1, 0); 1112 + ret = regmap_update_bits(state->regmap, 0xd700, 0x04, 0x00); 937 1113 if (ret) 938 1114 goto err; 939 1115 940 1116 /* set read-update bit for constellation */ 941 - ret = af9013_wr_reg_bits(state, 0xd371, 1, 1, 1); 1117 + ret = regmap_update_bits(state->regmap, 0xd371, 0x02, 0x02); 942 1118 if (ret) 943 1119 goto err; 944 1120 945 1121 /* settings for mp2if */ 946 1122 if (state->ts_mode == AF9013_TS_USB) { 947 1123 /* AF9015 split PSB to 1.5k + 0.5k */ 948 - ret = af9013_wr_reg_bits(state, 0xd50b, 2, 1, 1); 1124 + ret = regmap_update_bits(state->regmap, 0xd50b, 0x04, 0x04); 949 1125 if (ret) 950 1126 goto err; 951 1127 } else { 952 1128 /* AF9013 change the output bit to data7 */ 953 - ret = af9013_wr_reg_bits(state, 0xd500, 3, 1, 1); 1129 + ret = regmap_update_bits(state->regmap, 0xd500, 0x08, 0x08); 954 1130 if (ret) 955 1131 goto err; 956 1132 957 1133 /* AF9013 set mpeg to full speed */ 958 - ret = af9013_wr_reg_bits(state, 0xd502, 4, 1, 1); 1134 + ret = regmap_update_bits(state->regmap, 0xd502, 0x10, 0x10); 959 1135 if (ret) 960 1136 goto err; 961 1137 } 962 1138 963 - ret = af9013_wr_reg_bits(state, 0xd520, 4, 1, 1); 1139 + ret = regmap_update_bits(state->regmap, 0xd520, 0x10, 0x10); 964 1140 if (ret) 965 1141 goto err; 966 1142 ··· 969 1145 len = ARRAY_SIZE(ofsm_init); 970 1146 init = ofsm_init; 971 1147 for (i = 0; i < len; i++) { 972 - ret = af9013_wr_reg_bits(state, init[i].addr, init[i].pos, 973 - init[i].len, init[i].val); 1148 + u16 reg = init[i].addr; 1149 + u8 mask = GENMASK(init[i].pos + init[i].len - 1, init[i].pos); 1150 + u8 val = init[i].val << init[i].pos; 1151 + 1152 + ret = regmap_update_bits(state->regmap, reg, mask, val); 974 1153 if (ret) 975 1154 goto err; 976 1155 } ··· 1025 1198 } 1026 1199 1027 1200 for (i = 0; i < len; i++) { 1028 - ret = af9013_wr_reg_bits(state, init[i].addr, init[i].pos, 1029 - init[i].len, init[i].val); 1201 + u16 reg = init[i].addr; 1202 + u8 mask = GENMASK(init[i].pos + init[i].len - 1, init[i].pos); 1203 + u8 val = init[i].val << init[i].pos; 1204 + 1205 + ret = regmap_update_bits(state->regmap, reg, mask, val); 1030 1206 if (ret) 1031 1207 goto err; 1032 1208 } 1033 1209 1034 1210 /* TS mode */ 1035 - ret = af9013_wr_reg_bits(state, 0xd500, 1, 2, state->ts_mode); 1211 + ret = regmap_update_bits(state->regmap, 0xd500, 0x06, 1212 + state->ts_mode << 1); 1036 1213 if (ret) 1037 1214 goto err; 1038 1215 1039 1216 /* enable lock led */ 1040 - ret = af9013_wr_reg_bits(state, 0xd730, 0, 1, 1); 1217 + ret = regmap_update_bits(state->regmap, 0xd730, 0x01, 0x01); 1041 1218 if (ret) 1042 1219 goto err; 1043 1220 1044 1221 /* check if we support signal strength */ 1045 1222 if (!state->signal_strength_en) { 1046 - ret = af9013_rd_reg_bits(state, 0x9bee, 0, 1, 1047 - &state->signal_strength_en); 1223 + ret = regmap_read(state->regmap, 0x9bee, &utmp); 1048 1224 if (ret) 1049 1225 goto err; 1226 + 1227 + state->signal_strength_en = (utmp >> 0) & 0x01; 1050 1228 } 1051 1229 1052 1230 /* read values needed for signal strength calculation */ 1053 1231 if (state->signal_strength_en && !state->rf_50) { 1054 - ret = af9013_rd_reg(state, 0x9bbd, &state->rf_50); 1232 + ret = regmap_bulk_read(state->regmap, 0x9bbd, &state->rf_50, 1); 1055 1233 if (ret) 1056 1234 goto err; 1057 - 1058 - ret = af9013_rd_reg(state, 0x9bd0, &state->rf_80); 1235 + ret = regmap_bulk_read(state->regmap, 0x9bd0, &state->rf_80, 1); 1059 1236 if (ret) 1060 1237 goto err; 1061 - 1062 - ret = af9013_rd_reg(state, 0x9be2, &state->if_50); 1238 + ret = regmap_bulk_read(state->regmap, 0x9be2, &state->if_50, 1); 1063 1239 if (ret) 1064 1240 goto err; 1065 - 1066 - ret = af9013_rd_reg(state, 0x9be4, &state->if_80); 1241 + ret = regmap_bulk_read(state->regmap, 0x9be4, &state->if_80, 1); 1067 1242 if (ret) 1068 1243 goto err; 1069 1244 } 1070 1245 1071 1246 /* SNR */ 1072 - ret = af9013_wr_reg(state, 0xd2e2, 1); 1247 + ret = regmap_write(state->regmap, 0xd2e2, 0x01); 1073 1248 if (ret) 1074 1249 goto err; 1075 1250 1076 1251 /* BER / UCB */ 1077 1252 buf[0] = (10000 >> 0) & 0xff; 1078 1253 buf[1] = (10000 >> 8) & 0xff; 1079 - ret = af9013_wr_regs(state, 0xd385, buf, 2); 1254 + ret = regmap_bulk_write(state->regmap, 0xd385, buf, 2); 1080 1255 if (ret) 1081 1256 goto err; 1082 1257 1083 1258 /* enable FEC monitor */ 1084 - ret = af9013_wr_reg_bits(state, 0xd392, 1, 1, 1); 1259 + ret = regmap_update_bits(state->regmap, 0xd392, 0x02, 0x02); 1085 1260 if (ret) 1086 1261 goto err; 1087 1262 ··· 1108 1279 cancel_delayed_work_sync(&state->statistics_work); 1109 1280 1110 1281 /* disable lock led */ 1111 - ret = af9013_wr_reg_bits(state, 0xd730, 0, 1, 0); 1282 + ret = regmap_update_bits(state->regmap, 0xd730, 0x01, 0x00); 1112 1283 if (ret) 1113 1284 goto err; 1114 1285 ··· 1136 1307 return 0; 1137 1308 1138 1309 if (state->ts_mode == AF9013_TS_USB) 1139 - ret = af9013_wr_reg_bits(state, 0xd417, 3, 1, enable); 1310 + ret = regmap_update_bits(state->regmap, 0xd417, 0x08, 1311 + enable << 3); 1140 1312 else 1141 - ret = af9013_wr_reg_bits(state, 0xd607, 2, 1, enable); 1313 + ret = regmap_update_bits(state->regmap, 0xd607, 0x04, 1314 + enable << 2); 1142 1315 if (ret) 1143 1316 goto err; 1144 1317 ··· 1168 1337 { 1169 1338 struct i2c_client *client = state->client; 1170 1339 int i, len, remaining, ret; 1340 + unsigned int utmp; 1171 1341 const struct firmware *fw; 1172 1342 u16 checksum = 0; 1173 - u8 val; 1174 1343 u8 fw_params[4]; 1175 1344 u8 *fw_file = AF9013_FIRMWARE; 1176 1345 1177 1346 msleep(100); 1178 1347 /* check whether firmware is already running */ 1179 - ret = af9013_rd_reg(state, 0x98be, &val); 1348 + ret = regmap_read(state->regmap, 0x98be, &utmp); 1180 1349 if (ret) 1181 1350 goto err; 1182 1351 else 1183 - dev_dbg(&client->dev, "firmware status %02x\n", val); 1352 + dev_dbg(&client->dev, "firmware status %02x\n", utmp); 1184 1353 1185 - if (val == 0x0c) /* fw is running, no need for download */ 1354 + if (utmp == 0x0c) /* fw is running, no need for download */ 1186 1355 goto exit; 1187 1356 1188 1357 dev_info(&client->dev, "found a '%s' in cold state, will try to load a firmware\n", ··· 1209 1378 fw_params[3] = fw->size & 0xff; 1210 1379 1211 1380 /* write fw checksum & size */ 1212 - ret = af9013_write_ofsm_regs(state, 0x50fc, 1213 - fw_params, sizeof(fw_params)); 1381 + ret = regmap_bulk_write(state->regmap, 0x50fc, fw_params, 1382 + sizeof(fw_params)); 1383 + 1214 1384 if (ret) 1215 1385 goto err_release; 1216 1386 ··· 1222 1390 if (len > LEN_MAX) 1223 1391 len = LEN_MAX; 1224 1392 1225 - ret = af9013_write_ofsm_regs(state, 1226 - FW_ADDR + fw->size - remaining, 1227 - (u8 *) &fw->data[fw->size - remaining], len); 1393 + ret = regmap_bulk_write(state->regmap, 1394 + FW_ADDR + fw->size - remaining, 1395 + &fw->data[fw->size - remaining], len); 1228 1396 if (ret) { 1229 1397 dev_err(&client->dev, "firmware download failed %d\n", 1230 1398 ret); ··· 1233 1401 } 1234 1402 1235 1403 /* request boot firmware */ 1236 - ret = af9013_wr_reg(state, 0xe205, 1); 1404 + ret = regmap_write(state->regmap, 0xe205, 0x01); 1237 1405 if (ret) 1238 1406 goto err_release; 1239 1407 1240 - for (i = 0; i < 15; i++) { 1241 - msleep(100); 1408 + /* Check firmware status. 0c=OK, 04=fail */ 1409 + ret = regmap_read_poll_timeout(state->regmap, 0x98be, utmp, 1410 + (utmp == 0x0c || utmp == 0x04), 1411 + 5000, 1000000); 1412 + if (ret) 1413 + goto err_release; 1242 1414 1243 - /* check firmware status */ 1244 - ret = af9013_rd_reg(state, 0x98be, &val); 1245 - if (ret) 1246 - goto err_release; 1415 + dev_dbg(&client->dev, "firmware status %02x\n", utmp); 1247 1416 1248 - dev_dbg(&client->dev, "firmware status %02x\n", val); 1249 - 1250 - if (val == 0x0c || val == 0x04) /* success or fail */ 1251 - break; 1252 - } 1253 - 1254 - if (val == 0x04) { 1417 + if (utmp == 0x04) { 1255 1418 dev_err(&client->dev, "firmware did not run\n"); 1256 1419 ret = -ENODEV; 1257 - } else if (val != 0x0c) { 1420 + } else if (utmp != 0x0c) { 1258 1421 dev_err(&client->dev, "firmware boot timeout\n"); 1259 1422 ret = -ENODEV; 1260 1423 } ··· 1349 1522 return &state->fe; 1350 1523 } 1351 1524 1525 + /* Own I2C access routines needed for regmap as chip uses extra command byte */ 1526 + static int af9013_wregs(struct i2c_client *client, u8 cmd, u16 reg, 1527 + const u8 *val, int len) 1528 + { 1529 + int ret; 1530 + u8 buf[21]; 1531 + struct i2c_msg msg[1] = { 1532 + { 1533 + .addr = client->addr, 1534 + .flags = 0, 1535 + .len = 3 + len, 1536 + .buf = buf, 1537 + } 1538 + }; 1539 + 1540 + if (3 + len > sizeof(buf)) { 1541 + ret = -EINVAL; 1542 + goto err; 1543 + } 1544 + 1545 + buf[0] = (reg >> 8) & 0xff; 1546 + buf[1] = (reg >> 0) & 0xff; 1547 + buf[2] = cmd; 1548 + memcpy(&buf[3], val, len); 1549 + ret = i2c_transfer(client->adapter, msg, 1); 1550 + if (ret < 0) { 1551 + goto err; 1552 + } else if (ret != 1) { 1553 + ret = -EREMOTEIO; 1554 + goto err; 1555 + } 1556 + 1557 + return 0; 1558 + err: 1559 + dev_dbg(&client->dev, "failed %d\n", ret); 1560 + return ret; 1561 + } 1562 + 1563 + static int af9013_rregs(struct i2c_client *client, u8 cmd, u16 reg, 1564 + u8 *val, int len) 1565 + { 1566 + int ret; 1567 + u8 buf[3]; 1568 + struct i2c_msg msg[2] = { 1569 + { 1570 + .addr = client->addr, 1571 + .flags = 0, 1572 + .len = 3, 1573 + .buf = buf, 1574 + }, { 1575 + .addr = client->addr, 1576 + .flags = I2C_M_RD, 1577 + .len = len, 1578 + .buf = val, 1579 + } 1580 + }; 1581 + 1582 + buf[0] = (reg >> 8) & 0xff; 1583 + buf[1] = (reg >> 0) & 0xff; 1584 + buf[2] = cmd; 1585 + ret = i2c_transfer(client->adapter, msg, 2); 1586 + if (ret < 0) { 1587 + goto err; 1588 + } else if (ret != 2) { 1589 + ret = -EREMOTEIO; 1590 + goto err; 1591 + } 1592 + 1593 + return 0; 1594 + err: 1595 + dev_dbg(&client->dev, "failed %d\n", ret); 1596 + return ret; 1597 + } 1598 + 1599 + static int af9013_regmap_write(void *context, const void *data, size_t count) 1600 + { 1601 + struct i2c_client *client = context; 1602 + struct af9013_state *state = i2c_get_clientdata(client); 1603 + int ret, i; 1604 + u8 cmd; 1605 + u16 reg = ((u8 *)data)[0] << 8|((u8 *)data)[1] << 0; 1606 + u8 *val = &((u8 *)data)[2]; 1607 + const unsigned int len = count - 2; 1608 + 1609 + if (state->ts_mode == AF9013_TS_USB && (reg & 0xff00) != 0xae00) { 1610 + cmd = 0 << 7|0 << 6|(len - 1) << 2|1 << 1|1 << 0; 1611 + ret = af9013_wregs(client, cmd, reg, val, len); 1612 + if (ret) 1613 + goto err; 1614 + } else if (reg >= 0x5100 && reg < 0x8fff) { 1615 + /* Firmware download */ 1616 + cmd = 1 << 7|1 << 6|(len - 1) << 2|1 << 1|1 << 0; 1617 + ret = af9013_wregs(client, cmd, reg, val, len); 1618 + if (ret) 1619 + goto err; 1620 + } else { 1621 + cmd = 0 << 7|0 << 6|(1 - 1) << 2|1 << 1|1 << 0; 1622 + for (i = 0; i < len; i++) { 1623 + ret = af9013_wregs(client, cmd, reg + i, val + i, 1); 1624 + if (ret) 1625 + goto err; 1626 + } 1627 + } 1628 + 1629 + return 0; 1630 + err: 1631 + dev_dbg(&client->dev, "failed %d\n", ret); 1632 + return ret; 1633 + } 1634 + 1635 + static int af9013_regmap_read(void *context, const void *reg_buf, 1636 + size_t reg_size, void *val_buf, size_t val_size) 1637 + { 1638 + struct i2c_client *client = context; 1639 + struct af9013_state *state = i2c_get_clientdata(client); 1640 + int ret, i; 1641 + u8 cmd; 1642 + u16 reg = ((u8 *)reg_buf)[0] << 8|((u8 *)reg_buf)[1] << 0; 1643 + u8 *val = &((u8 *)val_buf)[0]; 1644 + const unsigned int len = val_size; 1645 + 1646 + if (state->ts_mode == AF9013_TS_USB && (reg & 0xff00) != 0xae00) { 1647 + cmd = 0 << 7|0 << 6|(len - 1) << 2|1 << 1|0 << 0; 1648 + ret = af9013_rregs(client, cmd, reg, val_buf, len); 1649 + if (ret) 1650 + goto err; 1651 + } else { 1652 + cmd = 0 << 7|0 << 6|(1 - 1) << 2|1 << 1|0 << 0; 1653 + for (i = 0; i < len; i++) { 1654 + ret = af9013_rregs(client, cmd, reg + i, val + i, 1); 1655 + if (ret) 1656 + goto err; 1657 + } 1658 + } 1659 + 1660 + return 0; 1661 + err: 1662 + dev_dbg(&client->dev, "failed %d\n", ret); 1663 + return ret; 1664 + } 1665 + 1352 1666 static int af9013_probe(struct i2c_client *client, 1353 1667 const struct i2c_device_id *id) 1354 1668 { ··· 1497 1529 struct af9013_platform_data *pdata = client->dev.platform_data; 1498 1530 int ret, i; 1499 1531 u8 firmware_version[4]; 1532 + static const struct regmap_bus regmap_bus = { 1533 + .read = af9013_regmap_read, 1534 + .write = af9013_regmap_write, 1535 + }; 1536 + static const struct regmap_config regmap_config = { 1537 + .reg_bits = 16, 1538 + .val_bits = 8, 1539 + }; 1500 1540 1501 1541 state = kzalloc(sizeof(*state), GFP_KERNEL); 1502 1542 if (!state) { ··· 1523 1547 memcpy(&state->api_version, pdata->api_version, sizeof(state->api_version)); 1524 1548 memcpy(&state->gpio, pdata->gpio, sizeof(state->gpio)); 1525 1549 INIT_DELAYED_WORK(&state->statistics_work, af9013_statistics_work); 1550 + state->regmap = regmap_init(&client->dev, &regmap_bus, client, 1551 + &regmap_config); 1552 + if (IS_ERR(state->regmap)) { 1553 + ret = PTR_ERR(state->regmap); 1554 + goto err_kfree; 1555 + } 1526 1556 1527 1557 /* Download firmware */ 1528 1558 if (state->ts_mode != AF9013_TS_USB) { 1529 1559 ret = af9013_download_firmware(state); 1530 1560 if (ret) 1531 - goto err_kfree; 1561 + goto err_regmap_exit; 1532 1562 } 1533 1563 1534 1564 /* Firmware version */ 1535 - ret = af9013_rd_regs(state, 0x5103, firmware_version, 1536 - sizeof(firmware_version)); 1565 + ret = regmap_bulk_read(state->regmap, 0x5103, firmware_version, 1566 + sizeof(firmware_version)); 1537 1567 if (ret) 1538 - goto err_kfree; 1568 + goto err_regmap_exit; 1539 1569 1540 1570 /* Set GPIOs */ 1541 1571 for (i = 0; i < sizeof(state->gpio); i++) { 1542 1572 ret = af9013_set_gpio(state, i, state->gpio[i]); 1543 1573 if (ret) 1544 - goto err_kfree; 1574 + goto err_regmap_exit; 1545 1575 } 1546 1576 1547 1577 /* Create dvb frontend */ ··· 1564 1582 firmware_version[0], firmware_version[1], 1565 1583 firmware_version[2], firmware_version[3]); 1566 1584 return 0; 1585 + err_regmap_exit: 1586 + regmap_exit(state->regmap); 1567 1587 err_kfree: 1568 1588 kfree(state); 1569 1589 err: ··· 1581 1597 1582 1598 /* Stop statistics polling */ 1583 1599 cancel_delayed_work_sync(&state->statistics_work); 1600 + 1601 + regmap_exit(state->regmap); 1584 1602 1585 1603 kfree(state); 1586 1604
+1
drivers/media/dvb-frontends/af9013_priv.h
··· 25 25 #include "af9013.h" 26 26 #include <linux/firmware.h> 27 27 #include <linux/math64.h> 28 + #include <linux/regmap.h> 28 29 29 30 #define AF9013_FIRMWARE "dvb-fe-af9013.fw" 30 31