root/drivers/mfd/tps6586x.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dev_to_tps6586x
  2. tps6586x_write
  3. tps6586x_writes
  4. tps6586x_read
  5. tps6586x_reads
  6. tps6586x_set_bits
  7. tps6586x_clr_bits
  8. tps6586x_update
  9. tps6586x_irq_get_virq
  10. tps6586x_get_version
  11. __remove_subdev
  12. tps6586x_remove_subdevs
  13. tps6586x_irq_lock
  14. tps6586x_irq_enable
  15. tps6586x_irq_disable
  16. tps6586x_irq_sync_unlock
  17. tps6586x_irq_set_wake
  18. tps6586x_irq_map
  19. tps6586x_irq
  20. tps6586x_irq_init
  21. tps6586x_add_subdevs
  22. tps6586x_parse_dt
  23. tps6586x_parse_dt
  24. is_volatile_reg
  25. tps6586x_power_off
  26. tps6586x_print_version
  27. tps6586x_i2c_probe
  28. tps6586x_i2c_remove
  29. tps6586x_i2c_suspend
  30. tps6586x_i2c_resume
  31. tps6586x_init
  32. tps6586x_exit

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Core driver for TI TPS6586x PMIC family
   4  *
   5  * Copyright (c) 2010 CompuLab Ltd.
   6  * Mike Rapoport <mike@compulab.co.il>
   7  *
   8  * Based on da903x.c.
   9  * Copyright (C) 2008 Compulab, Ltd.
  10  * Mike Rapoport <mike@compulab.co.il>
  11  * Copyright (C) 2006-2008 Marvell International Ltd.
  12  * Eric Miao <eric.miao@marvell.com>
  13  */
  14 
  15 #include <linux/interrupt.h>
  16 #include <linux/irq.h>
  17 #include <linux/irqdomain.h>
  18 #include <linux/kernel.h>
  19 #include <linux/module.h>
  20 #include <linux/mutex.h>
  21 #include <linux/slab.h>
  22 #include <linux/err.h>
  23 #include <linux/i2c.h>
  24 #include <linux/platform_device.h>
  25 #include <linux/regmap.h>
  26 #include <linux/of.h>
  27 
  28 #include <linux/mfd/core.h>
  29 #include <linux/mfd/tps6586x.h>
  30 
  31 #define TPS6586X_SUPPLYENE      0x14
  32 #define EXITSLREQ_BIT           BIT(1)
  33 #define SLEEP_MODE_BIT          BIT(3)
  34 
  35 /* interrupt control registers */
  36 #define TPS6586X_INT_ACK1       0xb5
  37 #define TPS6586X_INT_ACK2       0xb6
  38 #define TPS6586X_INT_ACK3       0xb7
  39 #define TPS6586X_INT_ACK4       0xb8
  40 
  41 /* interrupt mask registers */
  42 #define TPS6586X_INT_MASK1      0xb0
  43 #define TPS6586X_INT_MASK2      0xb1
  44 #define TPS6586X_INT_MASK3      0xb2
  45 #define TPS6586X_INT_MASK4      0xb3
  46 #define TPS6586X_INT_MASK5      0xb4
  47 
  48 /* device id */
  49 #define TPS6586X_VERSIONCRC     0xcd
  50 
  51 /* Maximum register */
  52 #define TPS6586X_MAX_REGISTER   TPS6586X_VERSIONCRC
  53 
  54 struct tps6586x_irq_data {
  55         u8      mask_reg;
  56         u8      mask_mask;
  57 };
  58 
  59 #define TPS6586X_IRQ(_reg, _mask)                               \
  60         {                                                       \
  61                 .mask_reg = (_reg) - TPS6586X_INT_MASK1,        \
  62                 .mask_mask = (_mask),                           \
  63         }
  64 
  65 static const struct tps6586x_irq_data tps6586x_irqs[] = {
  66         [TPS6586X_INT_PLDO_0]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 0),
  67         [TPS6586X_INT_PLDO_1]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 1),
  68         [TPS6586X_INT_PLDO_2]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 2),
  69         [TPS6586X_INT_PLDO_3]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 3),
  70         [TPS6586X_INT_PLDO_4]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 4),
  71         [TPS6586X_INT_PLDO_5]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 5),
  72         [TPS6586X_INT_PLDO_6]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 6),
  73         [TPS6586X_INT_PLDO_7]   = TPS6586X_IRQ(TPS6586X_INT_MASK1, 1 << 7),
  74         [TPS6586X_INT_COMP_DET] = TPS6586X_IRQ(TPS6586X_INT_MASK4, 1 << 0),
  75         [TPS6586X_INT_ADC]      = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 1),
  76         [TPS6586X_INT_PLDO_8]   = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 2),
  77         [TPS6586X_INT_PLDO_9]   = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 3),
  78         [TPS6586X_INT_PSM_0]    = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 4),
  79         [TPS6586X_INT_PSM_1]    = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 5),
  80         [TPS6586X_INT_PSM_2]    = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 6),
  81         [TPS6586X_INT_PSM_3]    = TPS6586X_IRQ(TPS6586X_INT_MASK2, 1 << 7),
  82         [TPS6586X_INT_RTC_ALM1] = TPS6586X_IRQ(TPS6586X_INT_MASK5, 1 << 4),
  83         [TPS6586X_INT_ACUSB_OVP] = TPS6586X_IRQ(TPS6586X_INT_MASK5, 0x03),
  84         [TPS6586X_INT_USB_DET]  = TPS6586X_IRQ(TPS6586X_INT_MASK5, 1 << 2),
  85         [TPS6586X_INT_AC_DET]   = TPS6586X_IRQ(TPS6586X_INT_MASK5, 1 << 3),
  86         [TPS6586X_INT_BAT_DET]  = TPS6586X_IRQ(TPS6586X_INT_MASK3, 1 << 0),
  87         [TPS6586X_INT_CHG_STAT] = TPS6586X_IRQ(TPS6586X_INT_MASK4, 0xfc),
  88         [TPS6586X_INT_CHG_TEMP] = TPS6586X_IRQ(TPS6586X_INT_MASK3, 0x06),
  89         [TPS6586X_INT_PP]       = TPS6586X_IRQ(TPS6586X_INT_MASK3, 0xf0),
  90         [TPS6586X_INT_RESUME]   = TPS6586X_IRQ(TPS6586X_INT_MASK5, 1 << 5),
  91         [TPS6586X_INT_LOW_SYS]  = TPS6586X_IRQ(TPS6586X_INT_MASK5, 1 << 6),
  92         [TPS6586X_INT_RTC_ALM2] = TPS6586X_IRQ(TPS6586X_INT_MASK4, 1 << 1),
  93 };
  94 
  95 static struct resource tps6586x_rtc_resources[] = {
  96         {
  97                 .start  = TPS6586X_INT_RTC_ALM1,
  98                 .end    = TPS6586X_INT_RTC_ALM1,
  99                 .flags  = IORESOURCE_IRQ,
 100         },
 101 };
 102 
 103 static const struct mfd_cell tps6586x_cell[] = {
 104         {
 105                 .name = "tps6586x-gpio",
 106         },
 107         {
 108                 .name = "tps6586x-regulator",
 109         },
 110         {
 111                 .name = "tps6586x-rtc",
 112                 .num_resources = ARRAY_SIZE(tps6586x_rtc_resources),
 113                 .resources = &tps6586x_rtc_resources[0],
 114         },
 115         {
 116                 .name = "tps6586x-onkey",
 117         },
 118 };
 119 
 120 struct tps6586x {
 121         struct device           *dev;
 122         struct i2c_client       *client;
 123         struct regmap           *regmap;
 124         int                     version;
 125 
 126         int                     irq;
 127         struct irq_chip         irq_chip;
 128         struct mutex            irq_lock;
 129         int                     irq_base;
 130         u32                     irq_en;
 131         u8                      mask_reg[5];
 132         struct irq_domain       *irq_domain;
 133 };
 134 
 135 static inline struct tps6586x *dev_to_tps6586x(struct device *dev)
 136 {
 137         return i2c_get_clientdata(to_i2c_client(dev));
 138 }
 139 
 140 int tps6586x_write(struct device *dev, int reg, uint8_t val)
 141 {
 142         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 143 
 144         return regmap_write(tps6586x->regmap, reg, val);
 145 }
 146 EXPORT_SYMBOL_GPL(tps6586x_write);
 147 
 148 int tps6586x_writes(struct device *dev, int reg, int len, uint8_t *val)
 149 {
 150         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 151 
 152         return regmap_bulk_write(tps6586x->regmap, reg, val, len);
 153 }
 154 EXPORT_SYMBOL_GPL(tps6586x_writes);
 155 
 156 int tps6586x_read(struct device *dev, int reg, uint8_t *val)
 157 {
 158         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 159         unsigned int rval;
 160         int ret;
 161 
 162         ret = regmap_read(tps6586x->regmap, reg, &rval);
 163         if (!ret)
 164                 *val = rval;
 165         return ret;
 166 }
 167 EXPORT_SYMBOL_GPL(tps6586x_read);
 168 
 169 int tps6586x_reads(struct device *dev, int reg, int len, uint8_t *val)
 170 {
 171         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 172 
 173         return regmap_bulk_read(tps6586x->regmap, reg, val, len);
 174 }
 175 EXPORT_SYMBOL_GPL(tps6586x_reads);
 176 
 177 int tps6586x_set_bits(struct device *dev, int reg, uint8_t bit_mask)
 178 {
 179         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 180 
 181         return regmap_update_bits(tps6586x->regmap, reg, bit_mask, bit_mask);
 182 }
 183 EXPORT_SYMBOL_GPL(tps6586x_set_bits);
 184 
 185 int tps6586x_clr_bits(struct device *dev, int reg, uint8_t bit_mask)
 186 {
 187         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 188 
 189         return regmap_update_bits(tps6586x->regmap, reg, bit_mask, 0);
 190 }
 191 EXPORT_SYMBOL_GPL(tps6586x_clr_bits);
 192 
 193 int tps6586x_update(struct device *dev, int reg, uint8_t val, uint8_t mask)
 194 {
 195         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 196 
 197         return regmap_update_bits(tps6586x->regmap, reg, mask, val);
 198 }
 199 EXPORT_SYMBOL_GPL(tps6586x_update);
 200 
 201 int tps6586x_irq_get_virq(struct device *dev, int irq)
 202 {
 203         struct tps6586x *tps6586x = dev_to_tps6586x(dev);
 204 
 205         return irq_create_mapping(tps6586x->irq_domain, irq);
 206 }
 207 EXPORT_SYMBOL_GPL(tps6586x_irq_get_virq);
 208 
 209 int tps6586x_get_version(struct device *dev)
 210 {
 211         struct tps6586x *tps6586x = dev_get_drvdata(dev);
 212 
 213         return tps6586x->version;
 214 }
 215 EXPORT_SYMBOL_GPL(tps6586x_get_version);
 216 
 217 static int __remove_subdev(struct device *dev, void *unused)
 218 {
 219         platform_device_unregister(to_platform_device(dev));
 220         return 0;
 221 }
 222 
 223 static int tps6586x_remove_subdevs(struct tps6586x *tps6586x)
 224 {
 225         return device_for_each_child(tps6586x->dev, NULL, __remove_subdev);
 226 }
 227 
 228 static void tps6586x_irq_lock(struct irq_data *data)
 229 {
 230         struct tps6586x *tps6586x = irq_data_get_irq_chip_data(data);
 231 
 232         mutex_lock(&tps6586x->irq_lock);
 233 }
 234 
 235 static void tps6586x_irq_enable(struct irq_data *irq_data)
 236 {
 237         struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data);
 238         unsigned int __irq = irq_data->hwirq;
 239         const struct tps6586x_irq_data *data = &tps6586x_irqs[__irq];
 240 
 241         tps6586x->mask_reg[data->mask_reg] &= ~data->mask_mask;
 242         tps6586x->irq_en |= (1 << __irq);
 243 }
 244 
 245 static void tps6586x_irq_disable(struct irq_data *irq_data)
 246 {
 247         struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data);
 248 
 249         unsigned int __irq = irq_data->hwirq;
 250         const struct tps6586x_irq_data *data = &tps6586x_irqs[__irq];
 251 
 252         tps6586x->mask_reg[data->mask_reg] |= data->mask_mask;
 253         tps6586x->irq_en &= ~(1 << __irq);
 254 }
 255 
 256 static void tps6586x_irq_sync_unlock(struct irq_data *data)
 257 {
 258         struct tps6586x *tps6586x = irq_data_get_irq_chip_data(data);
 259         int i;
 260 
 261         for (i = 0; i < ARRAY_SIZE(tps6586x->mask_reg); i++) {
 262                 int ret;
 263                 ret = tps6586x_write(tps6586x->dev,
 264                                             TPS6586X_INT_MASK1 + i,
 265                                             tps6586x->mask_reg[i]);
 266                 WARN_ON(ret);
 267         }
 268 
 269         mutex_unlock(&tps6586x->irq_lock);
 270 }
 271 
 272 #ifdef CONFIG_PM_SLEEP
 273 static int tps6586x_irq_set_wake(struct irq_data *irq_data, unsigned int on)
 274 {
 275         struct tps6586x *tps6586x = irq_data_get_irq_chip_data(irq_data);
 276         return irq_set_irq_wake(tps6586x->irq, on);
 277 }
 278 #else
 279 #define tps6586x_irq_set_wake NULL
 280 #endif
 281 
 282 static struct irq_chip tps6586x_irq_chip = {
 283         .name = "tps6586x",
 284         .irq_bus_lock = tps6586x_irq_lock,
 285         .irq_bus_sync_unlock = tps6586x_irq_sync_unlock,
 286         .irq_disable = tps6586x_irq_disable,
 287         .irq_enable = tps6586x_irq_enable,
 288         .irq_set_wake = tps6586x_irq_set_wake,
 289 };
 290 
 291 static int tps6586x_irq_map(struct irq_domain *h, unsigned int virq,
 292                                 irq_hw_number_t hw)
 293 {
 294         struct tps6586x *tps6586x = h->host_data;
 295 
 296         irq_set_chip_data(virq, tps6586x);
 297         irq_set_chip_and_handler(virq, &tps6586x_irq_chip, handle_simple_irq);
 298         irq_set_nested_thread(virq, 1);
 299         irq_set_noprobe(virq);
 300 
 301         return 0;
 302 }
 303 
 304 static const struct irq_domain_ops tps6586x_domain_ops = {
 305         .map    = tps6586x_irq_map,
 306         .xlate  = irq_domain_xlate_twocell,
 307 };
 308 
 309 static irqreturn_t tps6586x_irq(int irq, void *data)
 310 {
 311         struct tps6586x *tps6586x = data;
 312         u32 acks;
 313         int ret = 0;
 314 
 315         ret = tps6586x_reads(tps6586x->dev, TPS6586X_INT_ACK1,
 316                              sizeof(acks), (uint8_t *)&acks);
 317 
 318         if (ret < 0) {
 319                 dev_err(tps6586x->dev, "failed to read interrupt status\n");
 320                 return IRQ_NONE;
 321         }
 322 
 323         acks = le32_to_cpu(acks);
 324 
 325         while (acks) {
 326                 int i = __ffs(acks);
 327 
 328                 if (tps6586x->irq_en & (1 << i))
 329                         handle_nested_irq(
 330                                 irq_find_mapping(tps6586x->irq_domain, i));
 331 
 332                 acks &= ~(1 << i);
 333         }
 334 
 335         return IRQ_HANDLED;
 336 }
 337 
 338 static int tps6586x_irq_init(struct tps6586x *tps6586x, int irq,
 339                                        int irq_base)
 340 {
 341         int i, ret;
 342         u8 tmp[4];
 343         int new_irq_base;
 344         int irq_num = ARRAY_SIZE(tps6586x_irqs);
 345 
 346         tps6586x->irq = irq;
 347 
 348         mutex_init(&tps6586x->irq_lock);
 349         for (i = 0; i < 5; i++) {
 350                 tps6586x->mask_reg[i] = 0xff;
 351                 tps6586x_write(tps6586x->dev, TPS6586X_INT_MASK1 + i, 0xff);
 352         }
 353 
 354         tps6586x_reads(tps6586x->dev, TPS6586X_INT_ACK1, sizeof(tmp), tmp);
 355 
 356         if  (irq_base > 0) {
 357                 new_irq_base = irq_alloc_descs(irq_base, 0, irq_num, -1);
 358                 if (new_irq_base < 0) {
 359                         dev_err(tps6586x->dev,
 360                                 "Failed to alloc IRQs: %d\n", new_irq_base);
 361                         return new_irq_base;
 362                 }
 363         } else {
 364                 new_irq_base = 0;
 365         }
 366 
 367         tps6586x->irq_domain = irq_domain_add_simple(tps6586x->dev->of_node,
 368                                 irq_num, new_irq_base, &tps6586x_domain_ops,
 369                                 tps6586x);
 370         if (!tps6586x->irq_domain) {
 371                 dev_err(tps6586x->dev, "Failed to create IRQ domain\n");
 372                 return -ENOMEM;
 373         }
 374         ret = request_threaded_irq(irq, NULL, tps6586x_irq, IRQF_ONESHOT,
 375                                    "tps6586x", tps6586x);
 376 
 377         if (!ret)
 378                 device_init_wakeup(tps6586x->dev, 1);
 379 
 380         return ret;
 381 }
 382 
 383 static int tps6586x_add_subdevs(struct tps6586x *tps6586x,
 384                                           struct tps6586x_platform_data *pdata)
 385 {
 386         struct tps6586x_subdev_info *subdev;
 387         struct platform_device *pdev;
 388         int i, ret = 0;
 389 
 390         for (i = 0; i < pdata->num_subdevs; i++) {
 391                 subdev = &pdata->subdevs[i];
 392 
 393                 pdev = platform_device_alloc(subdev->name, subdev->id);
 394                 if (!pdev) {
 395                         ret = -ENOMEM;
 396                         goto failed;
 397                 }
 398 
 399                 pdev->dev.parent = tps6586x->dev;
 400                 pdev->dev.platform_data = subdev->platform_data;
 401                 pdev->dev.of_node = subdev->of_node;
 402 
 403                 ret = platform_device_add(pdev);
 404                 if (ret) {
 405                         platform_device_put(pdev);
 406                         goto failed;
 407                 }
 408         }
 409         return 0;
 410 
 411 failed:
 412         tps6586x_remove_subdevs(tps6586x);
 413         return ret;
 414 }
 415 
 416 #ifdef CONFIG_OF
 417 static struct tps6586x_platform_data *tps6586x_parse_dt(struct i2c_client *client)
 418 {
 419         struct device_node *np = client->dev.of_node;
 420         struct tps6586x_platform_data *pdata;
 421 
 422         pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
 423         if (!pdata)
 424                 return NULL;
 425 
 426         pdata->num_subdevs = 0;
 427         pdata->subdevs = NULL;
 428         pdata->gpio_base = -1;
 429         pdata->irq_base = -1;
 430         pdata->pm_off = of_property_read_bool(np, "ti,system-power-controller");
 431 
 432         return pdata;
 433 }
 434 
 435 static const struct of_device_id tps6586x_of_match[] = {
 436         { .compatible = "ti,tps6586x", },
 437         { },
 438 };
 439 #else
 440 static struct tps6586x_platform_data *tps6586x_parse_dt(struct i2c_client *client)
 441 {
 442         return NULL;
 443 }
 444 #endif
 445 
 446 static bool is_volatile_reg(struct device *dev, unsigned int reg)
 447 {
 448         /* Cache all interrupt mask register */
 449         if ((reg >= TPS6586X_INT_MASK1) && (reg <= TPS6586X_INT_MASK5))
 450                 return false;
 451 
 452         return true;
 453 }
 454 
 455 static const struct regmap_config tps6586x_regmap_config = {
 456         .reg_bits = 8,
 457         .val_bits = 8,
 458         .max_register = TPS6586X_MAX_REGISTER,
 459         .volatile_reg = is_volatile_reg,
 460         .cache_type = REGCACHE_RBTREE,
 461 };
 462 
 463 static struct device *tps6586x_dev;
 464 static void tps6586x_power_off(void)
 465 {
 466         if (tps6586x_clr_bits(tps6586x_dev, TPS6586X_SUPPLYENE, EXITSLREQ_BIT))
 467                 return;
 468 
 469         tps6586x_set_bits(tps6586x_dev, TPS6586X_SUPPLYENE, SLEEP_MODE_BIT);
 470 }
 471 
 472 static void tps6586x_print_version(struct i2c_client *client, int version)
 473 {
 474         const char *name;
 475 
 476         switch (version) {
 477         case TPS658621A:
 478                 name = "TPS658621A";
 479                 break;
 480         case TPS658621CD:
 481                 name = "TPS658621C/D";
 482                 break;
 483         case TPS658623:
 484                 name = "TPS658623";
 485                 break;
 486         case TPS658640:
 487         case TPS658640v2:
 488                 name = "TPS658640";
 489                 break;
 490         case TPS658643:
 491                 name = "TPS658643";
 492                 break;
 493         default:
 494                 name = "TPS6586X";
 495                 break;
 496         }
 497 
 498         dev_info(&client->dev, "Found %s, VERSIONCRC is %02x\n", name, version);
 499 }
 500 
 501 static int tps6586x_i2c_probe(struct i2c_client *client,
 502                                         const struct i2c_device_id *id)
 503 {
 504         struct tps6586x_platform_data *pdata = dev_get_platdata(&client->dev);
 505         struct tps6586x *tps6586x;
 506         int ret;
 507         int version;
 508 
 509         if (!pdata && client->dev.of_node)
 510                 pdata = tps6586x_parse_dt(client);
 511 
 512         if (!pdata) {
 513                 dev_err(&client->dev, "tps6586x requires platform data\n");
 514                 return -ENOTSUPP;
 515         }
 516 
 517         version = i2c_smbus_read_byte_data(client, TPS6586X_VERSIONCRC);
 518         if (version < 0) {
 519                 dev_err(&client->dev, "Chip ID read failed: %d\n", version);
 520                 return -EIO;
 521         }
 522 
 523         tps6586x = devm_kzalloc(&client->dev, sizeof(*tps6586x), GFP_KERNEL);
 524         if (!tps6586x)
 525                 return -ENOMEM;
 526 
 527         tps6586x->version = version;
 528         tps6586x_print_version(client, tps6586x->version);
 529 
 530         tps6586x->client = client;
 531         tps6586x->dev = &client->dev;
 532         i2c_set_clientdata(client, tps6586x);
 533 
 534         tps6586x->regmap = devm_regmap_init_i2c(client,
 535                                         &tps6586x_regmap_config);
 536         if (IS_ERR(tps6586x->regmap)) {
 537                 ret = PTR_ERR(tps6586x->regmap);
 538                 dev_err(&client->dev, "regmap init failed: %d\n", ret);
 539                 return ret;
 540         }
 541 
 542 
 543         if (client->irq) {
 544                 ret = tps6586x_irq_init(tps6586x, client->irq,
 545                                         pdata->irq_base);
 546                 if (ret) {
 547                         dev_err(&client->dev, "IRQ init failed: %d\n", ret);
 548                         return ret;
 549                 }
 550         }
 551 
 552         ret = mfd_add_devices(tps6586x->dev, -1,
 553                               tps6586x_cell, ARRAY_SIZE(tps6586x_cell),
 554                               NULL, 0, tps6586x->irq_domain);
 555         if (ret < 0) {
 556                 dev_err(&client->dev, "mfd_add_devices failed: %d\n", ret);
 557                 goto err_mfd_add;
 558         }
 559 
 560         ret = tps6586x_add_subdevs(tps6586x, pdata);
 561         if (ret) {
 562                 dev_err(&client->dev, "add devices failed: %d\n", ret);
 563                 goto err_add_devs;
 564         }
 565 
 566         if (pdata->pm_off && !pm_power_off) {
 567                 tps6586x_dev = &client->dev;
 568                 pm_power_off = tps6586x_power_off;
 569         }
 570 
 571         return 0;
 572 
 573 err_add_devs:
 574         mfd_remove_devices(tps6586x->dev);
 575 err_mfd_add:
 576         if (client->irq)
 577                 free_irq(client->irq, tps6586x);
 578         return ret;
 579 }
 580 
 581 static int tps6586x_i2c_remove(struct i2c_client *client)
 582 {
 583         struct tps6586x *tps6586x = i2c_get_clientdata(client);
 584 
 585         tps6586x_remove_subdevs(tps6586x);
 586         mfd_remove_devices(tps6586x->dev);
 587         if (client->irq)
 588                 free_irq(client->irq, tps6586x);
 589         return 0;
 590 }
 591 
 592 static int __maybe_unused tps6586x_i2c_suspend(struct device *dev)
 593 {
 594         struct tps6586x *tps6586x = dev_get_drvdata(dev);
 595 
 596         if (tps6586x->client->irq)
 597                 disable_irq(tps6586x->client->irq);
 598 
 599         return 0;
 600 }
 601 
 602 static int __maybe_unused tps6586x_i2c_resume(struct device *dev)
 603 {
 604         struct tps6586x *tps6586x = dev_get_drvdata(dev);
 605 
 606         if (tps6586x->client->irq)
 607                 enable_irq(tps6586x->client->irq);
 608 
 609         return 0;
 610 }
 611 
 612 static SIMPLE_DEV_PM_OPS(tps6586x_pm_ops, tps6586x_i2c_suspend,
 613                          tps6586x_i2c_resume);
 614 
 615 static const struct i2c_device_id tps6586x_id_table[] = {
 616         { "tps6586x", 0 },
 617         { },
 618 };
 619 MODULE_DEVICE_TABLE(i2c, tps6586x_id_table);
 620 
 621 static struct i2c_driver tps6586x_driver = {
 622         .driver = {
 623                 .name   = "tps6586x",
 624                 .of_match_table = of_match_ptr(tps6586x_of_match),
 625                 .pm     = &tps6586x_pm_ops,
 626         },
 627         .probe          = tps6586x_i2c_probe,
 628         .remove         = tps6586x_i2c_remove,
 629         .id_table       = tps6586x_id_table,
 630 };
 631 
 632 static int __init tps6586x_init(void)
 633 {
 634         return i2c_add_driver(&tps6586x_driver);
 635 }
 636 subsys_initcall(tps6586x_init);
 637 
 638 static void __exit tps6586x_exit(void)
 639 {
 640         i2c_del_driver(&tps6586x_driver);
 641 }
 642 module_exit(tps6586x_exit);
 643 
 644 MODULE_DESCRIPTION("TPS6586X core driver");
 645 MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
 646 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */