1 /* 2 * MFD driver for TWL6040 audio device 3 * 4 * Authors: Misael Lopez Cruz <misael.lopez@ti.com> 5 * Jorge Eduardo Candelaria <jorge.candelaria@ti.com> 6 * Peter Ujfalusi <peter.ujfalusi@ti.com> 7 * 8 * Copyright: (C) 2011 Texas Instruments, Inc. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 22 * 02110-1301 USA 23 * 24 */ 25 26 #include <linux/module.h> 27 #include <linux/types.h> 28 #include <linux/slab.h> 29 #include <linux/kernel.h> 30 #include <linux/err.h> 31 #include <linux/platform_device.h> 32 #include <linux/of.h> 33 #include <linux/of_irq.h> 34 #include <linux/of_gpio.h> 35 #include <linux/of_platform.h> 36 #include <linux/gpio.h> 37 #include <linux/delay.h> 38 #include <linux/i2c.h> 39 #include <linux/regmap.h> 40 #include <linux/mfd/core.h> 41 #include <linux/mfd/twl6040.h> 42 #include <linux/regulator/consumer.h> 43 44 #define VIBRACTRL_MEMBER(reg) ((reg == TWL6040_REG_VIBCTLL) ? 0 : 1) 45 #define TWL6040_NUM_SUPPLIES (2) 46 47 static const struct reg_default twl6040_defaults[] = { 48 { 0x01, 0x4B }, /* REG_ASICID (ro) */ 49 { 0x02, 0x00 }, /* REG_ASICREV (ro) */ 50 { 0x03, 0x00 }, /* REG_INTID */ 51 { 0x04, 0x00 }, /* REG_INTMR */ 52 { 0x05, 0x00 }, /* REG_NCPCTRL */ 53 { 0x06, 0x00 }, /* REG_LDOCTL */ 54 { 0x07, 0x60 }, /* REG_HPPLLCTL */ 55 { 0x08, 0x00 }, /* REG_LPPLLCTL */ 56 { 0x09, 0x4A }, /* REG_LPPLLDIV */ 57 { 0x0A, 0x00 }, /* REG_AMICBCTL */ 58 { 0x0B, 0x00 }, /* REG_DMICBCTL */ 59 { 0x0C, 0x00 }, /* REG_MICLCTL */ 60 { 0x0D, 0x00 }, /* REG_MICRCTL */ 61 { 0x0E, 0x00 }, /* REG_MICGAIN */ 62 { 0x0F, 0x1B }, /* REG_LINEGAIN */ 63 { 0x10, 0x00 }, /* REG_HSLCTL */ 64 { 0x11, 0x00 }, /* REG_HSRCTL */ 65 { 0x12, 0x00 }, /* REG_HSGAIN */ 66 { 0x13, 0x00 }, /* REG_EARCTL */ 67 { 0x14, 0x00 }, /* REG_HFLCTL */ 68 { 0x15, 0x00 }, /* REG_HFLGAIN */ 69 { 0x16, 0x00 }, /* REG_HFRCTL */ 70 { 0x17, 0x00 }, /* REG_HFRGAIN */ 71 { 0x18, 0x00 }, /* REG_VIBCTLL */ 72 { 0x19, 0x00 }, /* REG_VIBDATL */ 73 { 0x1A, 0x00 }, /* REG_VIBCTLR */ 74 { 0x1B, 0x00 }, /* REG_VIBDATR */ 75 { 0x1C, 0x00 }, /* REG_HKCTL1 */ 76 { 0x1D, 0x00 }, /* REG_HKCTL2 */ 77 { 0x1E, 0x00 }, /* REG_GPOCTL */ 78 { 0x1F, 0x00 }, /* REG_ALB */ 79 { 0x20, 0x00 }, /* REG_DLB */ 80 /* 0x28, REG_TRIM1 */ 81 /* 0x29, REG_TRIM2 */ 82 /* 0x2A, REG_TRIM3 */ 83 /* 0x2B, REG_HSOTRIM */ 84 /* 0x2C, REG_HFOTRIM */ 85 { 0x2D, 0x08 }, /* REG_ACCCTL */ 86 { 0x2E, 0x00 }, /* REG_STATUS (ro) */ 87 }; 88 89 static struct reg_sequence twl6040_patch[] = { 90 /* 91 * Select I2C bus access to dual access registers 92 * Interrupt register is cleared on read 93 * Select fast mode for i2c (400KHz) 94 */ 95 { TWL6040_REG_ACCCTL, 96 TWL6040_I2CSEL | TWL6040_INTCLRMODE | TWL6040_I2CMODE(1) }, 97 }; 98 99 100 static bool twl6040_has_vibra(struct device_node *parent) 101 { 102 struct device_node *node; 103 104 node = of_get_child_by_name(parent, "vibra"); 105 if (node) { 106 of_node_put(node); 107 return true; 108 } 109 110 return false; 111 } 112 113 int twl6040_reg_read(struct twl6040 *twl6040, unsigned int reg) 114 { 115 int ret; 116 unsigned int val; 117 118 ret = regmap_read(twl6040->regmap, reg, &val); 119 if (ret < 0) 120 return ret; 121 122 return val; 123 } 124 EXPORT_SYMBOL(twl6040_reg_read); 125 126 int twl6040_reg_write(struct twl6040 *twl6040, unsigned int reg, u8 val) 127 { 128 int ret; 129 130 ret = regmap_write(twl6040->regmap, reg, val); 131 132 return ret; 133 } 134 EXPORT_SYMBOL(twl6040_reg_write); 135 136 int twl6040_set_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask) 137 { 138 return regmap_update_bits(twl6040->regmap, reg, mask, mask); 139 } 140 EXPORT_SYMBOL(twl6040_set_bits); 141 142 int twl6040_clear_bits(struct twl6040 *twl6040, unsigned int reg, u8 mask) 143 { 144 return regmap_update_bits(twl6040->regmap, reg, mask, 0); 145 } 146 EXPORT_SYMBOL(twl6040_clear_bits); 147 148 /* twl6040 codec manual power-up sequence */ 149 static int twl6040_power_up_manual(struct twl6040 *twl6040) 150 { 151 u8 ldoctl, ncpctl, lppllctl; 152 int ret; 153 154 /* enable high-side LDO, reference system and internal oscillator */ 155 ldoctl = TWL6040_HSLDOENA | TWL6040_REFENA | TWL6040_OSCENA; 156 ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 157 if (ret) 158 return ret; 159 usleep_range(10000, 10500); 160 161 /* enable negative charge pump */ 162 ncpctl = TWL6040_NCPENA; 163 ret = twl6040_reg_write(twl6040, TWL6040_REG_NCPCTL, ncpctl); 164 if (ret) 165 goto ncp_err; 166 usleep_range(1000, 1500); 167 168 /* enable low-side LDO */ 169 ldoctl |= TWL6040_LSLDOENA; 170 ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 171 if (ret) 172 goto lsldo_err; 173 usleep_range(1000, 1500); 174 175 /* enable low-power PLL */ 176 lppllctl = TWL6040_LPLLENA; 177 ret = twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl); 178 if (ret) 179 goto lppll_err; 180 usleep_range(5000, 5500); 181 182 /* disable internal oscillator */ 183 ldoctl &= ~TWL6040_OSCENA; 184 ret = twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 185 if (ret) 186 goto osc_err; 187 188 return 0; 189 190 osc_err: 191 lppllctl &= ~TWL6040_LPLLENA; 192 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl); 193 lppll_err: 194 ldoctl &= ~TWL6040_LSLDOENA; 195 twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 196 lsldo_err: 197 ncpctl &= ~TWL6040_NCPENA; 198 twl6040_reg_write(twl6040, TWL6040_REG_NCPCTL, ncpctl); 199 ncp_err: 200 ldoctl &= ~(TWL6040_HSLDOENA | TWL6040_REFENA | TWL6040_OSCENA); 201 twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 202 203 dev_err(twl6040->dev, "manual power-up failed\n"); 204 return ret; 205 } 206 207 /* twl6040 manual power-down sequence */ 208 static void twl6040_power_down_manual(struct twl6040 *twl6040) 209 { 210 u8 ncpctl, ldoctl, lppllctl; 211 212 ncpctl = twl6040_reg_read(twl6040, TWL6040_REG_NCPCTL); 213 ldoctl = twl6040_reg_read(twl6040, TWL6040_REG_LDOCTL); 214 lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL); 215 216 /* enable internal oscillator */ 217 ldoctl |= TWL6040_OSCENA; 218 twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 219 usleep_range(1000, 1500); 220 221 /* disable low-power PLL */ 222 lppllctl &= ~TWL6040_LPLLENA; 223 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, lppllctl); 224 225 /* disable low-side LDO */ 226 ldoctl &= ~TWL6040_LSLDOENA; 227 twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 228 229 /* disable negative charge pump */ 230 ncpctl &= ~TWL6040_NCPENA; 231 twl6040_reg_write(twl6040, TWL6040_REG_NCPCTL, ncpctl); 232 233 /* disable high-side LDO, reference system and internal oscillator */ 234 ldoctl &= ~(TWL6040_HSLDOENA | TWL6040_REFENA | TWL6040_OSCENA); 235 twl6040_reg_write(twl6040, TWL6040_REG_LDOCTL, ldoctl); 236 } 237 238 static irqreturn_t twl6040_readyint_handler(int irq, void *data) 239 { 240 struct twl6040 *twl6040 = data; 241 242 complete(&twl6040->ready); 243 244 return IRQ_HANDLED; 245 } 246 247 static irqreturn_t twl6040_thint_handler(int irq, void *data) 248 { 249 struct twl6040 *twl6040 = data; 250 u8 status; 251 252 status = twl6040_reg_read(twl6040, TWL6040_REG_STATUS); 253 if (status & TWL6040_TSHUTDET) { 254 dev_warn(twl6040->dev, "Thermal shutdown, powering-off"); 255 twl6040_power(twl6040, 0); 256 } else { 257 dev_warn(twl6040->dev, "Leaving thermal shutdown, powering-on"); 258 twl6040_power(twl6040, 1); 259 } 260 261 return IRQ_HANDLED; 262 } 263 264 static int twl6040_power_up_automatic(struct twl6040 *twl6040) 265 { 266 int time_left; 267 268 gpio_set_value(twl6040->audpwron, 1); 269 270 time_left = wait_for_completion_timeout(&twl6040->ready, 271 msecs_to_jiffies(144)); 272 if (!time_left) { 273 u8 intid; 274 275 dev_warn(twl6040->dev, "timeout waiting for READYINT\n"); 276 intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID); 277 if (!(intid & TWL6040_READYINT)) { 278 dev_err(twl6040->dev, "automatic power-up failed\n"); 279 gpio_set_value(twl6040->audpwron, 0); 280 return -ETIMEDOUT; 281 } 282 } 283 284 return 0; 285 } 286 287 int twl6040_power(struct twl6040 *twl6040, int on) 288 { 289 int ret = 0; 290 291 mutex_lock(&twl6040->mutex); 292 293 if (on) { 294 /* already powered-up */ 295 if (twl6040->power_count++) 296 goto out; 297 298 ret = clk_prepare_enable(twl6040->clk32k); 299 if (ret) { 300 twl6040->power_count = 0; 301 goto out; 302 } 303 304 /* Allow writes to the chip */ 305 regcache_cache_only(twl6040->regmap, false); 306 307 if (gpio_is_valid(twl6040->audpwron)) { 308 /* use automatic power-up sequence */ 309 ret = twl6040_power_up_automatic(twl6040); 310 if (ret) { 311 clk_disable_unprepare(twl6040->clk32k); 312 twl6040->power_count = 0; 313 goto out; 314 } 315 } else { 316 /* use manual power-up sequence */ 317 ret = twl6040_power_up_manual(twl6040); 318 if (ret) { 319 clk_disable_unprepare(twl6040->clk32k); 320 twl6040->power_count = 0; 321 goto out; 322 } 323 } 324 325 /* Sync with the HW */ 326 regcache_sync(twl6040->regmap); 327 328 /* Default PLL configuration after power up */ 329 twl6040->pll = TWL6040_SYSCLK_SEL_LPPLL; 330 twl6040->sysclk_rate = 19200000; 331 } else { 332 /* already powered-down */ 333 if (!twl6040->power_count) { 334 dev_err(twl6040->dev, 335 "device is already powered-off\n"); 336 ret = -EPERM; 337 goto out; 338 } 339 340 if (--twl6040->power_count) 341 goto out; 342 343 if (gpio_is_valid(twl6040->audpwron)) { 344 /* use AUDPWRON line */ 345 gpio_set_value(twl6040->audpwron, 0); 346 347 /* power-down sequence latency */ 348 usleep_range(500, 700); 349 } else { 350 /* use manual power-down sequence */ 351 twl6040_power_down_manual(twl6040); 352 } 353 354 /* Set regmap to cache only and mark it as dirty */ 355 regcache_cache_only(twl6040->regmap, true); 356 regcache_mark_dirty(twl6040->regmap); 357 358 twl6040->sysclk_rate = 0; 359 360 if (twl6040->pll == TWL6040_SYSCLK_SEL_HPPLL) { 361 clk_disable_unprepare(twl6040->mclk); 362 twl6040->mclk_rate = 0; 363 } 364 365 clk_disable_unprepare(twl6040->clk32k); 366 } 367 368 out: 369 mutex_unlock(&twl6040->mutex); 370 return ret; 371 } 372 EXPORT_SYMBOL(twl6040_power); 373 374 int twl6040_set_pll(struct twl6040 *twl6040, int pll_id, 375 unsigned int freq_in, unsigned int freq_out) 376 { 377 u8 hppllctl, lppllctl; 378 int ret = 0; 379 380 mutex_lock(&twl6040->mutex); 381 382 hppllctl = twl6040_reg_read(twl6040, TWL6040_REG_HPPLLCTL); 383 lppllctl = twl6040_reg_read(twl6040, TWL6040_REG_LPPLLCTL); 384 385 /* Force full reconfiguration when switching between PLL */ 386 if (pll_id != twl6040->pll) { 387 twl6040->sysclk_rate = 0; 388 twl6040->mclk_rate = 0; 389 } 390 391 switch (pll_id) { 392 case TWL6040_SYSCLK_SEL_LPPLL: 393 /* low-power PLL divider */ 394 /* Change the sysclk configuration only if it has been canged */ 395 if (twl6040->sysclk_rate != freq_out) { 396 switch (freq_out) { 397 case 17640000: 398 lppllctl |= TWL6040_LPLLFIN; 399 break; 400 case 19200000: 401 lppllctl &= ~TWL6040_LPLLFIN; 402 break; 403 default: 404 dev_err(twl6040->dev, 405 "freq_out %d not supported\n", 406 freq_out); 407 ret = -EINVAL; 408 goto pll_out; 409 } 410 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, 411 lppllctl); 412 } 413 414 /* The PLL in use has not been change, we can exit */ 415 if (twl6040->pll == pll_id) 416 break; 417 418 switch (freq_in) { 419 case 32768: 420 lppllctl |= TWL6040_LPLLENA; 421 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, 422 lppllctl); 423 mdelay(5); 424 lppllctl &= ~TWL6040_HPLLSEL; 425 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, 426 lppllctl); 427 hppllctl &= ~TWL6040_HPLLENA; 428 twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL, 429 hppllctl); 430 break; 431 default: 432 dev_err(twl6040->dev, 433 "freq_in %d not supported\n", freq_in); 434 ret = -EINVAL; 435 goto pll_out; 436 } 437 438 clk_disable_unprepare(twl6040->mclk); 439 break; 440 case TWL6040_SYSCLK_SEL_HPPLL: 441 /* high-performance PLL can provide only 19.2 MHz */ 442 if (freq_out != 19200000) { 443 dev_err(twl6040->dev, 444 "freq_out %d not supported\n", freq_out); 445 ret = -EINVAL; 446 goto pll_out; 447 } 448 449 if (twl6040->mclk_rate != freq_in) { 450 hppllctl &= ~TWL6040_MCLK_MSK; 451 452 switch (freq_in) { 453 case 12000000: 454 /* PLL enabled, active mode */ 455 hppllctl |= TWL6040_MCLK_12000KHZ | 456 TWL6040_HPLLENA; 457 break; 458 case 19200000: 459 /* PLL enabled, bypass mode */ 460 hppllctl |= TWL6040_MCLK_19200KHZ | 461 TWL6040_HPLLBP | TWL6040_HPLLENA; 462 break; 463 case 26000000: 464 /* PLL enabled, active mode */ 465 hppllctl |= TWL6040_MCLK_26000KHZ | 466 TWL6040_HPLLENA; 467 break; 468 case 38400000: 469 /* PLL enabled, bypass mode */ 470 hppllctl |= TWL6040_MCLK_38400KHZ | 471 TWL6040_HPLLBP | TWL6040_HPLLENA; 472 break; 473 default: 474 dev_err(twl6040->dev, 475 "freq_in %d not supported\n", freq_in); 476 ret = -EINVAL; 477 goto pll_out; 478 } 479 480 /* When switching to HPPLL, enable the mclk first */ 481 if (pll_id != twl6040->pll) 482 clk_prepare_enable(twl6040->mclk); 483 /* 484 * enable clock slicer to ensure input waveform is 485 * square 486 */ 487 hppllctl |= TWL6040_HPLLSQRENA; 488 489 twl6040_reg_write(twl6040, TWL6040_REG_HPPLLCTL, 490 hppllctl); 491 usleep_range(500, 700); 492 lppllctl |= TWL6040_HPLLSEL; 493 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, 494 lppllctl); 495 lppllctl &= ~TWL6040_LPLLENA; 496 twl6040_reg_write(twl6040, TWL6040_REG_LPPLLCTL, 497 lppllctl); 498 499 twl6040->mclk_rate = freq_in; 500 } 501 break; 502 default: 503 dev_err(twl6040->dev, "unknown pll id %d\n", pll_id); 504 ret = -EINVAL; 505 goto pll_out; 506 } 507 508 twl6040->sysclk_rate = freq_out; 509 twl6040->pll = pll_id; 510 511 pll_out: 512 mutex_unlock(&twl6040->mutex); 513 return ret; 514 } 515 EXPORT_SYMBOL(twl6040_set_pll); 516 517 int twl6040_get_pll(struct twl6040 *twl6040) 518 { 519 if (twl6040->power_count) 520 return twl6040->pll; 521 else 522 return -ENODEV; 523 } 524 EXPORT_SYMBOL(twl6040_get_pll); 525 526 unsigned int twl6040_get_sysclk(struct twl6040 *twl6040) 527 { 528 return twl6040->sysclk_rate; 529 } 530 EXPORT_SYMBOL(twl6040_get_sysclk); 531 532 /* Get the combined status of the vibra control register */ 533 int twl6040_get_vibralr_status(struct twl6040 *twl6040) 534 { 535 unsigned int reg; 536 int ret; 537 u8 status; 538 539 ret = regmap_read(twl6040->regmap, TWL6040_REG_VIBCTLL, ®); 540 if (ret != 0) 541 return ret; 542 status = reg; 543 544 ret = regmap_read(twl6040->regmap, TWL6040_REG_VIBCTLR, ®); 545 if (ret != 0) 546 return ret; 547 status |= reg; 548 549 status &= (TWL6040_VIBENA | TWL6040_VIBSEL); 550 551 return status; 552 } 553 EXPORT_SYMBOL(twl6040_get_vibralr_status); 554 555 static struct resource twl6040_vibra_rsrc[] = { 556 { 557 .flags = IORESOURCE_IRQ, 558 }, 559 }; 560 561 static struct resource twl6040_codec_rsrc[] = { 562 { 563 .flags = IORESOURCE_IRQ, 564 }, 565 }; 566 567 static bool twl6040_readable_reg(struct device *dev, unsigned int reg) 568 { 569 /* Register 0 is not readable */ 570 if (!reg) 571 return false; 572 return true; 573 } 574 575 static bool twl6040_volatile_reg(struct device *dev, unsigned int reg) 576 { 577 switch (reg) { 578 case TWL6040_REG_ASICID: 579 case TWL6040_REG_ASICREV: 580 case TWL6040_REG_INTID: 581 case TWL6040_REG_LPPLLCTL: 582 case TWL6040_REG_HPPLLCTL: 583 case TWL6040_REG_STATUS: 584 return true; 585 default: 586 return false; 587 } 588 } 589 590 static bool twl6040_writeable_reg(struct device *dev, unsigned int reg) 591 { 592 switch (reg) { 593 case TWL6040_REG_ASICID: 594 case TWL6040_REG_ASICREV: 595 case TWL6040_REG_STATUS: 596 return false; 597 default: 598 return true; 599 } 600 } 601 602 static const struct regmap_config twl6040_regmap_config = { 603 .reg_bits = 8, 604 .val_bits = 8, 605 606 .reg_defaults = twl6040_defaults, 607 .num_reg_defaults = ARRAY_SIZE(twl6040_defaults), 608 609 .max_register = TWL6040_REG_STATUS, /* 0x2e */ 610 611 .readable_reg = twl6040_readable_reg, 612 .volatile_reg = twl6040_volatile_reg, 613 .writeable_reg = twl6040_writeable_reg, 614 615 .cache_type = REGCACHE_RBTREE, 616 .use_single_rw = true, 617 }; 618 619 static const struct regmap_irq twl6040_irqs[] = { 620 { .reg_offset = 0, .mask = TWL6040_THINT, }, 621 { .reg_offset = 0, .mask = TWL6040_PLUGINT | TWL6040_UNPLUGINT, }, 622 { .reg_offset = 0, .mask = TWL6040_HOOKINT, }, 623 { .reg_offset = 0, .mask = TWL6040_HFINT, }, 624 { .reg_offset = 0, .mask = TWL6040_VIBINT, }, 625 { .reg_offset = 0, .mask = TWL6040_READYINT, }, 626 }; 627 628 static struct regmap_irq_chip twl6040_irq_chip = { 629 .name = "twl6040", 630 .irqs = twl6040_irqs, 631 .num_irqs = ARRAY_SIZE(twl6040_irqs), 632 633 .num_regs = 1, 634 .status_base = TWL6040_REG_INTID, 635 .mask_base = TWL6040_REG_INTMR, 636 }; 637 638 static int twl6040_probe(struct i2c_client *client, 639 const struct i2c_device_id *id) 640 { 641 struct device_node *node = client->dev.of_node; 642 struct twl6040 *twl6040; 643 struct mfd_cell *cell = NULL; 644 int irq, ret, children = 0; 645 646 if (!node) { 647 dev_err(&client->dev, "of node is missing\n"); 648 return -EINVAL; 649 } 650 651 /* In order to operate correctly we need valid interrupt config */ 652 if (!client->irq) { 653 dev_err(&client->dev, "Invalid IRQ configuration\n"); 654 return -EINVAL; 655 } 656 657 twl6040 = devm_kzalloc(&client->dev, sizeof(struct twl6040), 658 GFP_KERNEL); 659 if (!twl6040) 660 return -ENOMEM; 661 662 twl6040->regmap = devm_regmap_init_i2c(client, &twl6040_regmap_config); 663 if (IS_ERR(twl6040->regmap)) 664 return PTR_ERR(twl6040->regmap); 665 666 i2c_set_clientdata(client, twl6040); 667 668 twl6040->clk32k = devm_clk_get(&client->dev, "clk32k"); 669 if (IS_ERR(twl6040->clk32k)) { 670 if (PTR_ERR(twl6040->clk32k) == -EPROBE_DEFER) 671 return -EPROBE_DEFER; 672 dev_dbg(&client->dev, "clk32k is not handled\n"); 673 twl6040->clk32k = NULL; 674 } 675 676 twl6040->mclk = devm_clk_get(&client->dev, "mclk"); 677 if (IS_ERR(twl6040->mclk)) { 678 if (PTR_ERR(twl6040->mclk) == -EPROBE_DEFER) 679 return -EPROBE_DEFER; 680 dev_dbg(&client->dev, "mclk is not handled\n"); 681 twl6040->mclk = NULL; 682 } 683 684 twl6040->supplies[0].supply = "vio"; 685 twl6040->supplies[1].supply = "v2v1"; 686 ret = devm_regulator_bulk_get(&client->dev, TWL6040_NUM_SUPPLIES, 687 twl6040->supplies); 688 if (ret != 0) { 689 dev_err(&client->dev, "Failed to get supplies: %d\n", ret); 690 return ret; 691 } 692 693 ret = regulator_bulk_enable(TWL6040_NUM_SUPPLIES, twl6040->supplies); 694 if (ret != 0) { 695 dev_err(&client->dev, "Failed to enable supplies: %d\n", ret); 696 return ret; 697 } 698 699 twl6040->dev = &client->dev; 700 twl6040->irq = client->irq; 701 702 mutex_init(&twl6040->mutex); 703 init_completion(&twl6040->ready); 704 705 regmap_register_patch(twl6040->regmap, twl6040_patch, 706 ARRAY_SIZE(twl6040_patch)); 707 708 twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV); 709 if (twl6040->rev < 0) { 710 dev_err(&client->dev, "Failed to read revision register: %d\n", 711 twl6040->rev); 712 ret = twl6040->rev; 713 goto gpio_err; 714 } 715 716 /* ERRATA: Automatic power-up is not possible in ES1.0 */ 717 if (twl6040_get_revid(twl6040) > TWL6040_REV_ES1_0) 718 twl6040->audpwron = of_get_named_gpio(node, 719 "ti,audpwron-gpio", 0); 720 else 721 twl6040->audpwron = -EINVAL; 722 723 if (gpio_is_valid(twl6040->audpwron)) { 724 ret = devm_gpio_request_one(&client->dev, twl6040->audpwron, 725 GPIOF_OUT_INIT_LOW, "audpwron"); 726 if (ret) 727 goto gpio_err; 728 729 /* Clear any pending interrupt */ 730 twl6040_reg_read(twl6040, TWL6040_REG_INTID); 731 } 732 733 ret = regmap_add_irq_chip(twl6040->regmap, twl6040->irq, IRQF_ONESHOT, 734 0, &twl6040_irq_chip, &twl6040->irq_data); 735 if (ret < 0) 736 goto gpio_err; 737 738 twl6040->irq_ready = regmap_irq_get_virq(twl6040->irq_data, 739 TWL6040_IRQ_READY); 740 twl6040->irq_th = regmap_irq_get_virq(twl6040->irq_data, 741 TWL6040_IRQ_TH); 742 743 ret = devm_request_threaded_irq(twl6040->dev, twl6040->irq_ready, NULL, 744 twl6040_readyint_handler, IRQF_ONESHOT, 745 "twl6040_irq_ready", twl6040); 746 if (ret) { 747 dev_err(twl6040->dev, "READY IRQ request failed: %d\n", ret); 748 goto readyirq_err; 749 } 750 751 ret = devm_request_threaded_irq(twl6040->dev, twl6040->irq_th, NULL, 752 twl6040_thint_handler, IRQF_ONESHOT, 753 "twl6040_irq_th", twl6040); 754 if (ret) { 755 dev_err(twl6040->dev, "Thermal IRQ request failed: %d\n", ret); 756 goto readyirq_err; 757 } 758 759 /* 760 * The main functionality of twl6040 to provide audio on OMAP4+ systems. 761 * We can add the ASoC codec child whenever this driver has been loaded. 762 */ 763 irq = regmap_irq_get_virq(twl6040->irq_data, TWL6040_IRQ_PLUG); 764 cell = &twl6040->cells[children]; 765 cell->name = "twl6040-codec"; 766 twl6040_codec_rsrc[0].start = irq; 767 twl6040_codec_rsrc[0].end = irq; 768 cell->resources = twl6040_codec_rsrc; 769 cell->num_resources = ARRAY_SIZE(twl6040_codec_rsrc); 770 children++; 771 772 /* Vibra input driver support */ 773 if (twl6040_has_vibra(node)) { 774 irq = regmap_irq_get_virq(twl6040->irq_data, TWL6040_IRQ_VIB); 775 776 cell = &twl6040->cells[children]; 777 cell->name = "twl6040-vibra"; 778 twl6040_vibra_rsrc[0].start = irq; 779 twl6040_vibra_rsrc[0].end = irq; 780 cell->resources = twl6040_vibra_rsrc; 781 cell->num_resources = ARRAY_SIZE(twl6040_vibra_rsrc); 782 children++; 783 } 784 785 /* GPO support */ 786 cell = &twl6040->cells[children]; 787 cell->name = "twl6040-gpo"; 788 children++; 789 790 /* PDM clock support */ 791 cell = &twl6040->cells[children]; 792 cell->name = "twl6040-pdmclk"; 793 children++; 794 795 /* The chip is powered down so mark regmap to cache only and dirty */ 796 regcache_cache_only(twl6040->regmap, true); 797 regcache_mark_dirty(twl6040->regmap); 798 799 ret = mfd_add_devices(&client->dev, -1, twl6040->cells, children, 800 NULL, 0, NULL); 801 if (ret) 802 goto readyirq_err; 803 804 return 0; 805 806 readyirq_err: 807 regmap_del_irq_chip(twl6040->irq, twl6040->irq_data); 808 gpio_err: 809 regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies); 810 return ret; 811 } 812 813 static int twl6040_remove(struct i2c_client *client) 814 { 815 struct twl6040 *twl6040 = i2c_get_clientdata(client); 816 817 if (twl6040->power_count) 818 twl6040_power(twl6040, 0); 819 820 regmap_del_irq_chip(twl6040->irq, twl6040->irq_data); 821 822 mfd_remove_devices(&client->dev); 823 824 regulator_bulk_disable(TWL6040_NUM_SUPPLIES, twl6040->supplies); 825 826 return 0; 827 } 828 829 static const struct i2c_device_id twl6040_i2c_id[] = { 830 { "twl6040", 0, }, 831 { "twl6041", 0, }, 832 { }, 833 }; 834 MODULE_DEVICE_TABLE(i2c, twl6040_i2c_id); 835 836 static struct i2c_driver twl6040_driver = { 837 .driver = { 838 .name = "twl6040", 839 }, 840 .probe = twl6040_probe, 841 .remove = twl6040_remove, 842 .id_table = twl6040_i2c_id, 843 }; 844 845 module_i2c_driver(twl6040_driver); 846 847 MODULE_DESCRIPTION("TWL6040 MFD"); 848 MODULE_AUTHOR("Misael Lopez Cruz <misael.lopez@ti.com>"); 849 MODULE_AUTHOR("Jorge Eduardo Candelaria <jorge.candelaria@ti.com>"); 850 MODULE_LICENSE("GPL"); 851