linux/drivers/leds/leds-pca955x.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright 2007-2008 Extreme Engineering Solutions, Inc.
   4 *
   5 * Author: Nate Case <ncase@xes-inc.com>
   6 *
   7 * LED driver for various PCA955x I2C LED drivers
   8 *
   9 * Supported devices:
  10 *
  11 *      Device          Description             7-bit slave address
  12 *      ------          -----------             -------------------
  13 *      PCA9550         2-bit driver            0x60 .. 0x61
  14 *      PCA9551         8-bit driver            0x60 .. 0x67
  15 *      PCA9552         16-bit driver           0x60 .. 0x67
  16 *      PCA9553/01      4-bit driver            0x62
  17 *      PCA9553/02      4-bit driver            0x63
  18 *
  19 * Philips PCA955x LED driver chips follow a register map as shown below:
  20 *
  21 *      Control Register                Description
  22 *      ----------------                -----------
  23 *      0x0                             Input register 0
  24 *                                      ..
  25 *      NUM_INPUT_REGS - 1              Last Input register X
  26 *
  27 *      NUM_INPUT_REGS                  Frequency prescaler 0
  28 *      NUM_INPUT_REGS + 1              PWM register 0
  29 *      NUM_INPUT_REGS + 2              Frequency prescaler 1
  30 *      NUM_INPUT_REGS + 3              PWM register 1
  31 *
  32 *      NUM_INPUT_REGS + 4              LED selector 0
  33 *      NUM_INPUT_REGS + 4
  34 *          + NUM_LED_REGS - 1          Last LED selector
  35 *
  36 *  where NUM_INPUT_REGS and NUM_LED_REGS vary depending on how many
  37 *  bits the chip supports.
  38 */
  39
  40#include <linux/ctype.h>
  41#include <linux/delay.h>
  42#include <linux/err.h>
  43#include <linux/gpio/driver.h>
  44#include <linux/i2c.h>
  45#include <linux/leds.h>
  46#include <linux/module.h>
  47#include <linux/of.h>
  48#include <linux/property.h>
  49#include <linux/slab.h>
  50#include <linux/string.h>
  51
  52#include <dt-bindings/leds/leds-pca955x.h>
  53
  54/* LED select registers determine the source that drives LED outputs */
  55#define PCA955X_LS_LED_ON       0x0     /* Output LOW */
  56#define PCA955X_LS_LED_OFF      0x1     /* Output HI-Z */
  57#define PCA955X_LS_BLINK0       0x2     /* Blink at PWM0 rate */
  58#define PCA955X_LS_BLINK1       0x3     /* Blink at PWM1 rate */
  59
  60#define PCA955X_GPIO_INPUT      LED_OFF
  61#define PCA955X_GPIO_HIGH       LED_OFF
  62#define PCA955X_GPIO_LOW        LED_FULL
  63
  64enum pca955x_type {
  65        pca9550,
  66        pca9551,
  67        pca9552,
  68        ibm_pca9552,
  69        pca9553,
  70};
  71
  72struct pca955x_chipdef {
  73        int                     bits;
  74        u8                      slv_addr;       /* 7-bit slave address mask */
  75        int                     slv_addr_shift; /* Number of bits to ignore */
  76};
  77
  78static struct pca955x_chipdef pca955x_chipdefs[] = {
  79        [pca9550] = {
  80                .bits           = 2,
  81                .slv_addr       = /* 110000x */ 0x60,
  82                .slv_addr_shift = 1,
  83        },
  84        [pca9551] = {
  85                .bits           = 8,
  86                .slv_addr       = /* 1100xxx */ 0x60,
  87                .slv_addr_shift = 3,
  88        },
  89        [pca9552] = {
  90                .bits           = 16,
  91                .slv_addr       = /* 1100xxx */ 0x60,
  92                .slv_addr_shift = 3,
  93        },
  94        [ibm_pca9552] = {
  95                .bits           = 16,
  96                .slv_addr       = /* 0110xxx */ 0x30,
  97                .slv_addr_shift = 3,
  98        },
  99        [pca9553] = {
 100                .bits           = 4,
 101                .slv_addr       = /* 110001x */ 0x62,
 102                .slv_addr_shift = 1,
 103        },
 104};
 105
 106static const struct i2c_device_id pca955x_id[] = {
 107        { "pca9550", pca9550 },
 108        { "pca9551", pca9551 },
 109        { "pca9552", pca9552 },
 110        { "ibm-pca9552", ibm_pca9552 },
 111        { "pca9553", pca9553 },
 112        { }
 113};
 114MODULE_DEVICE_TABLE(i2c, pca955x_id);
 115
 116struct pca955x {
 117        struct mutex lock;
 118        struct pca955x_led *leds;
 119        struct pca955x_chipdef  *chipdef;
 120        struct i2c_client       *client;
 121#ifdef CONFIG_LEDS_PCA955X_GPIO
 122        struct gpio_chip gpio;
 123#endif
 124};
 125
 126struct pca955x_led {
 127        struct pca955x  *pca955x;
 128        struct led_classdev     led_cdev;
 129        int                     led_num;        /* 0 .. 15 potentially */
 130        u32                     type;
 131        int                     default_state;
 132        struct fwnode_handle    *fwnode;
 133};
 134
 135struct pca955x_platform_data {
 136        struct pca955x_led      *leds;
 137        int                     num_leds;
 138};
 139
 140/* 8 bits per input register */
 141static inline int pca95xx_num_input_regs(int bits)
 142{
 143        return (bits + 7) / 8;
 144}
 145
 146/* 4 bits per LED selector register */
 147static inline int pca95xx_num_led_regs(int bits)
 148{
 149        return (bits + 3)  / 4;
 150}
 151
 152/*
 153 * Return an LED selector register value based on an existing one, with
 154 * the appropriate 2-bit state value set for the given LED number (0-3).
 155 */
 156static inline u8 pca955x_ledsel(u8 oldval, int led_num, int state)
 157{
 158        return (oldval & (~(0x3 << (led_num << 1)))) |
 159                ((state & 0x3) << (led_num << 1));
 160}
 161
 162/*
 163 * Write to frequency prescaler register, used to program the
 164 * period of the PWM output.  period = (PSCx + 1) / 38
 165 */
 166static int pca955x_write_psc(struct i2c_client *client, int n, u8 val)
 167{
 168        struct pca955x *pca955x = i2c_get_clientdata(client);
 169        u8 cmd = pca95xx_num_input_regs(pca955x->chipdef->bits) + (2 * n);
 170        int ret;
 171
 172        ret = i2c_smbus_write_byte_data(client, cmd, val);
 173        if (ret < 0)
 174                dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
 175                        __func__, n, val, ret);
 176        return ret;
 177}
 178
 179/*
 180 * Write to PWM register, which determines the duty cycle of the
 181 * output.  LED is OFF when the count is less than the value of this
 182 * register, and ON when it is greater.  If PWMx == 0, LED is always OFF.
 183 *
 184 * Duty cycle is (256 - PWMx) / 256
 185 */
 186static int pca955x_write_pwm(struct i2c_client *client, int n, u8 val)
 187{
 188        struct pca955x *pca955x = i2c_get_clientdata(client);
 189        u8 cmd = pca95xx_num_input_regs(pca955x->chipdef->bits) + 1 + (2 * n);
 190        int ret;
 191
 192        ret = i2c_smbus_write_byte_data(client, cmd, val);
 193        if (ret < 0)
 194                dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
 195                        __func__, n, val, ret);
 196        return ret;
 197}
 198
 199/*
 200 * Write to LED selector register, which determines the source that
 201 * drives the LED output.
 202 */
 203static int pca955x_write_ls(struct i2c_client *client, int n, u8 val)
 204{
 205        struct pca955x *pca955x = i2c_get_clientdata(client);
 206        u8 cmd = pca95xx_num_input_regs(pca955x->chipdef->bits) + 4 + n;
 207        int ret;
 208
 209        ret = i2c_smbus_write_byte_data(client, cmd, val);
 210        if (ret < 0)
 211                dev_err(&client->dev, "%s: reg 0x%x, val 0x%x, err %d\n",
 212                        __func__, n, val, ret);
 213        return ret;
 214}
 215
 216/*
 217 * Read the LED selector register, which determines the source that
 218 * drives the LED output.
 219 */
 220static int pca955x_read_ls(struct i2c_client *client, int n, u8 *val)
 221{
 222        struct pca955x *pca955x = i2c_get_clientdata(client);
 223        u8 cmd = pca95xx_num_input_regs(pca955x->chipdef->bits) + 4 + n;
 224        int ret;
 225
 226        ret = i2c_smbus_read_byte_data(client, cmd);
 227        if (ret < 0) {
 228                dev_err(&client->dev, "%s: reg 0x%x, err %d\n",
 229                        __func__, n, ret);
 230                return ret;
 231        }
 232        *val = (u8)ret;
 233        return 0;
 234}
 235
 236static int pca955x_read_pwm(struct i2c_client *client, int n, u8 *val)
 237{
 238        struct pca955x *pca955x = i2c_get_clientdata(client);
 239        u8 cmd = pca95xx_num_input_regs(pca955x->chipdef->bits) + 1 + (2 * n);
 240        int ret;
 241
 242        ret = i2c_smbus_read_byte_data(client, cmd);
 243        if (ret < 0) {
 244                dev_err(&client->dev, "%s: reg 0x%x, err %d\n",
 245                        __func__, n, ret);
 246                return ret;
 247        }
 248        *val = (u8)ret;
 249        return 0;
 250}
 251
 252static enum led_brightness pca955x_led_get(struct led_classdev *led_cdev)
 253{
 254        struct pca955x_led *pca955x_led = container_of(led_cdev,
 255                                                       struct pca955x_led,
 256                                                       led_cdev);
 257        struct pca955x *pca955x = pca955x_led->pca955x;
 258        u8 ls, pwm;
 259        int ret;
 260
 261        ret = pca955x_read_ls(pca955x->client, pca955x_led->led_num / 4, &ls);
 262        if (ret)
 263                return ret;
 264
 265        ls = (ls >> ((pca955x_led->led_num % 4) << 1)) & 0x3;
 266        switch (ls) {
 267        case PCA955X_LS_LED_ON:
 268                ret = LED_FULL;
 269                break;
 270        case PCA955X_LS_LED_OFF:
 271                ret = LED_OFF;
 272                break;
 273        case PCA955X_LS_BLINK0:
 274                ret = LED_HALF;
 275                break;
 276        case PCA955X_LS_BLINK1:
 277                ret = pca955x_read_pwm(pca955x->client, 1, &pwm);
 278                if (ret)
 279                        return ret;
 280                ret = 255 - pwm;
 281                break;
 282        }
 283
 284        return ret;
 285}
 286
 287static int pca955x_led_set(struct led_classdev *led_cdev,
 288                            enum led_brightness value)
 289{
 290        struct pca955x_led *pca955x_led;
 291        struct pca955x *pca955x;
 292        u8 ls;
 293        int chip_ls;    /* which LSx to use (0-3 potentially) */
 294        int ls_led;     /* which set of bits within LSx to use (0-3) */
 295        int ret;
 296
 297        pca955x_led = container_of(led_cdev, struct pca955x_led, led_cdev);
 298        pca955x = pca955x_led->pca955x;
 299
 300        chip_ls = pca955x_led->led_num / 4;
 301        ls_led = pca955x_led->led_num % 4;
 302
 303        mutex_lock(&pca955x->lock);
 304
 305        ret = pca955x_read_ls(pca955x->client, chip_ls, &ls);
 306        if (ret)
 307                goto out;
 308
 309        switch (value) {
 310        case LED_FULL:
 311                ls = pca955x_ledsel(ls, ls_led, PCA955X_LS_LED_ON);
 312                break;
 313        case LED_OFF:
 314                ls = pca955x_ledsel(ls, ls_led, PCA955X_LS_LED_OFF);
 315                break;
 316        case LED_HALF:
 317                ls = pca955x_ledsel(ls, ls_led, PCA955X_LS_BLINK0);
 318                break;
 319        default:
 320                /*
 321                 * Use PWM1 for all other values.  This has the unwanted
 322                 * side effect of making all LEDs on the chip share the
 323                 * same brightness level if set to a value other than
 324                 * OFF, HALF, or FULL.  But, this is probably better than
 325                 * just turning off for all other values.
 326                 */
 327                ret = pca955x_write_pwm(pca955x->client, 1, 255 - value);
 328                if (ret)
 329                        goto out;
 330                ls = pca955x_ledsel(ls, ls_led, PCA955X_LS_BLINK1);
 331                break;
 332        }
 333
 334        ret = pca955x_write_ls(pca955x->client, chip_ls, ls);
 335
 336out:
 337        mutex_unlock(&pca955x->lock);
 338
 339        return ret;
 340}
 341
 342#ifdef CONFIG_LEDS_PCA955X_GPIO
 343/*
 344 * Read the INPUT register, which contains the state of LEDs.
 345 */
 346static int pca955x_read_input(struct i2c_client *client, int n, u8 *val)
 347{
 348        int ret = i2c_smbus_read_byte_data(client, n);
 349
 350        if (ret < 0) {
 351                dev_err(&client->dev, "%s: reg 0x%x, err %d\n",
 352                        __func__, n, ret);
 353                return ret;
 354        }
 355        *val = (u8)ret;
 356        return 0;
 357
 358}
 359
 360static int pca955x_gpio_request_pin(struct gpio_chip *gc, unsigned int offset)
 361{
 362        struct pca955x *pca955x = gpiochip_get_data(gc);
 363        struct pca955x_led *led = &pca955x->leds[offset];
 364
 365        if (led->type == PCA955X_TYPE_GPIO)
 366                return 0;
 367
 368        return -EBUSY;
 369}
 370
 371static int pca955x_set_value(struct gpio_chip *gc, unsigned int offset,
 372                             int val)
 373{
 374        struct pca955x *pca955x = gpiochip_get_data(gc);
 375        struct pca955x_led *led = &pca955x->leds[offset];
 376
 377        if (val)
 378                return pca955x_led_set(&led->led_cdev, PCA955X_GPIO_HIGH);
 379
 380        return pca955x_led_set(&led->led_cdev, PCA955X_GPIO_LOW);
 381}
 382
 383static void pca955x_gpio_set_value(struct gpio_chip *gc, unsigned int offset,
 384                                   int val)
 385{
 386        pca955x_set_value(gc, offset, val);
 387}
 388
 389static int pca955x_gpio_get_value(struct gpio_chip *gc, unsigned int offset)
 390{
 391        struct pca955x *pca955x = gpiochip_get_data(gc);
 392        struct pca955x_led *led = &pca955x->leds[offset];
 393        u8 reg = 0;
 394
 395        /* There is nothing we can do about errors */
 396        pca955x_read_input(pca955x->client, led->led_num / 8, &reg);
 397
 398        return !!(reg & (1 << (led->led_num % 8)));
 399}
 400
 401static int pca955x_gpio_direction_input(struct gpio_chip *gc,
 402                                        unsigned int offset)
 403{
 404        struct pca955x *pca955x = gpiochip_get_data(gc);
 405        struct pca955x_led *led = &pca955x->leds[offset];
 406
 407        /* To use as input ensure pin is not driven. */
 408        return pca955x_led_set(&led->led_cdev, PCA955X_GPIO_INPUT);
 409}
 410
 411static int pca955x_gpio_direction_output(struct gpio_chip *gc,
 412                                         unsigned int offset, int val)
 413{
 414        return pca955x_set_value(gc, offset, val);
 415}
 416#endif /* CONFIG_LEDS_PCA955X_GPIO */
 417
 418static struct pca955x_platform_data *
 419pca955x_get_pdata(struct i2c_client *client, struct pca955x_chipdef *chip)
 420{
 421        struct pca955x_platform_data *pdata;
 422        struct pca955x_led *led;
 423        struct fwnode_handle *child;
 424        int count;
 425
 426        count = device_get_child_node_count(&client->dev);
 427        if (!count || count > chip->bits)
 428                return ERR_PTR(-ENODEV);
 429
 430        pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
 431        if (!pdata)
 432                return ERR_PTR(-ENOMEM);
 433
 434        pdata->leds = devm_kcalloc(&client->dev,
 435                                   chip->bits, sizeof(struct pca955x_led),
 436                                   GFP_KERNEL);
 437        if (!pdata->leds)
 438                return ERR_PTR(-ENOMEM);
 439
 440        device_for_each_child_node(&client->dev, child) {
 441                const char *state;
 442                u32 reg;
 443                int res;
 444
 445                res = fwnode_property_read_u32(child, "reg", &reg);
 446                if ((res != 0) || (reg >= chip->bits))
 447                        continue;
 448
 449                led = &pdata->leds[reg];
 450                led->type = PCA955X_TYPE_LED;
 451                led->fwnode = child;
 452                fwnode_property_read_u32(child, "type", &led->type);
 453
 454                if (!fwnode_property_read_string(child, "default-state",
 455                                                 &state)) {
 456                        if (!strcmp(state, "keep"))
 457                                led->default_state = LEDS_GPIO_DEFSTATE_KEEP;
 458                        else if (!strcmp(state, "on"))
 459                                led->default_state = LEDS_GPIO_DEFSTATE_ON;
 460                        else
 461                                led->default_state = LEDS_GPIO_DEFSTATE_OFF;
 462                } else {
 463                        led->default_state = LEDS_GPIO_DEFSTATE_OFF;
 464                }
 465        }
 466
 467        pdata->num_leds = chip->bits;
 468
 469        return pdata;
 470}
 471
 472static const struct of_device_id of_pca955x_match[] = {
 473        { .compatible = "nxp,pca9550", .data = (void *)pca9550 },
 474        { .compatible = "nxp,pca9551", .data = (void *)pca9551 },
 475        { .compatible = "nxp,pca9552", .data = (void *)pca9552 },
 476        { .compatible = "ibm,pca9552", .data = (void *)ibm_pca9552 },
 477        { .compatible = "nxp,pca9553", .data = (void *)pca9553 },
 478        {},
 479};
 480MODULE_DEVICE_TABLE(of, of_pca955x_match);
 481
 482static int pca955x_probe(struct i2c_client *client)
 483{
 484        struct pca955x *pca955x;
 485        struct pca955x_led *pca955x_led;
 486        struct pca955x_chipdef *chip;
 487        struct led_classdev *led;
 488        struct led_init_data init_data;
 489        struct i2c_adapter *adapter;
 490        int i, err;
 491        struct pca955x_platform_data *pdata;
 492        int ngpios = 0;
 493        bool set_default_label = false;
 494        bool keep_pwm = false;
 495        char default_label[8];
 496        enum pca955x_type chip_type;
 497        const void *md = device_get_match_data(&client->dev);
 498
 499        if (md) {
 500                chip_type = (enum pca955x_type)md;
 501        } else {
 502                const struct i2c_device_id *id = i2c_match_id(pca955x_id,
 503                                                              client);
 504
 505                if (id) {
 506                        chip_type = (enum pca955x_type)id->driver_data;
 507                } else {
 508                        dev_err(&client->dev, "unknown chip\n");
 509                        return -ENODEV;
 510                }
 511        }
 512
 513        chip = &pca955x_chipdefs[chip_type];
 514        adapter = client->adapter;
 515        pdata = dev_get_platdata(&client->dev);
 516        if (!pdata) {
 517                pdata = pca955x_get_pdata(client, chip);
 518                if (IS_ERR(pdata))
 519                        return PTR_ERR(pdata);
 520        }
 521
 522        /* Make sure the slave address / chip type combo given is possible */
 523        if ((client->addr & ~((1 << chip->slv_addr_shift) - 1)) !=
 524            chip->slv_addr) {
 525                dev_err(&client->dev, "invalid slave address %02x\n",
 526                        client->addr);
 527                return -ENODEV;
 528        }
 529
 530        dev_info(&client->dev, "leds-pca955x: Using %s %d-bit LED driver at "
 531                 "slave address 0x%02x\n", client->name, chip->bits,
 532                 client->addr);
 533
 534        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
 535                return -EIO;
 536
 537        if (pdata->num_leds != chip->bits) {
 538                dev_err(&client->dev,
 539                        "board info claims %d LEDs on a %d-bit chip\n",
 540                        pdata->num_leds, chip->bits);
 541                return -ENODEV;
 542        }
 543
 544        pca955x = devm_kzalloc(&client->dev, sizeof(*pca955x), GFP_KERNEL);
 545        if (!pca955x)
 546                return -ENOMEM;
 547
 548        pca955x->leds = devm_kcalloc(&client->dev, chip->bits,
 549                                     sizeof(*pca955x_led), GFP_KERNEL);
 550        if (!pca955x->leds)
 551                return -ENOMEM;
 552
 553        i2c_set_clientdata(client, pca955x);
 554
 555        mutex_init(&pca955x->lock);
 556        pca955x->client = client;
 557        pca955x->chipdef = chip;
 558
 559        init_data.devname_mandatory = false;
 560        init_data.devicename = "pca955x";
 561
 562        for (i = 0; i < chip->bits; i++) {
 563                pca955x_led = &pca955x->leds[i];
 564                pca955x_led->led_num = i;
 565                pca955x_led->pca955x = pca955x;
 566                pca955x_led->type = pdata->leds[i].type;
 567
 568                switch (pca955x_led->type) {
 569                case PCA955X_TYPE_NONE:
 570                        break;
 571                case PCA955X_TYPE_GPIO:
 572                        ngpios++;
 573                        break;
 574                case PCA955X_TYPE_LED:
 575                        led = &pca955x_led->led_cdev;
 576                        led->brightness_set_blocking = pca955x_led_set;
 577                        led->brightness_get = pca955x_led_get;
 578
 579                        if (pdata->leds[i].default_state ==
 580                            LEDS_GPIO_DEFSTATE_OFF) {
 581                                err = pca955x_led_set(led, LED_OFF);
 582                                if (err)
 583                                        return err;
 584                        } else if (pdata->leds[i].default_state ==
 585                                   LEDS_GPIO_DEFSTATE_ON) {
 586                                err = pca955x_led_set(led, LED_FULL);
 587                                if (err)
 588                                        return err;
 589                        }
 590
 591                        init_data.fwnode = pdata->leds[i].fwnode;
 592
 593                        if (is_of_node(init_data.fwnode)) {
 594                                if (to_of_node(init_data.fwnode)->name[0] ==
 595                                    '\0')
 596                                        set_default_label = true;
 597                                else
 598                                        set_default_label = false;
 599                        } else {
 600                                set_default_label = true;
 601                        }
 602
 603                        if (set_default_label) {
 604                                snprintf(default_label, sizeof(default_label),
 605                                         "%d", i);
 606                                init_data.default_label = default_label;
 607                        } else {
 608                                init_data.default_label = NULL;
 609                        }
 610
 611                        err = devm_led_classdev_register_ext(&client->dev, led,
 612                                                             &init_data);
 613                        if (err)
 614                                return err;
 615
 616                        /*
 617                         * For default-state == "keep", let the core update the
 618                         * brightness from the hardware, then check the
 619                         * brightness to see if it's using PWM1. If so, PWM1
 620                         * should not be written below.
 621                         */
 622                        if (pdata->leds[i].default_state ==
 623                            LEDS_GPIO_DEFSTATE_KEEP) {
 624                                if (led->brightness != LED_FULL &&
 625                                    led->brightness != LED_OFF &&
 626                                    led->brightness != LED_HALF)
 627                                        keep_pwm = true;
 628                        }
 629                }
 630        }
 631
 632        /* PWM0 is used for half brightness or 50% duty cycle */
 633        err = pca955x_write_pwm(client, 0, 255 - LED_HALF);
 634        if (err)
 635                return err;
 636
 637        if (!keep_pwm) {
 638                /* PWM1 is used for variable brightness, default to OFF */
 639                err = pca955x_write_pwm(client, 1, 0);
 640                if (err)
 641                        return err;
 642        }
 643
 644        /* Set to fast frequency so we do not see flashing */
 645        err = pca955x_write_psc(client, 0, 0);
 646        if (err)
 647                return err;
 648        err = pca955x_write_psc(client, 1, 0);
 649        if (err)
 650                return err;
 651
 652#ifdef CONFIG_LEDS_PCA955X_GPIO
 653        if (ngpios) {
 654                pca955x->gpio.label = "gpio-pca955x";
 655                pca955x->gpio.direction_input = pca955x_gpio_direction_input;
 656                pca955x->gpio.direction_output = pca955x_gpio_direction_output;
 657                pca955x->gpio.set = pca955x_gpio_set_value;
 658                pca955x->gpio.get = pca955x_gpio_get_value;
 659                pca955x->gpio.request = pca955x_gpio_request_pin;
 660                pca955x->gpio.can_sleep = 1;
 661                pca955x->gpio.base = -1;
 662                pca955x->gpio.ngpio = ngpios;
 663                pca955x->gpio.parent = &client->dev;
 664                pca955x->gpio.owner = THIS_MODULE;
 665
 666                err = devm_gpiochip_add_data(&client->dev, &pca955x->gpio,
 667                                             pca955x);
 668                if (err) {
 669                        /* Use data->gpio.dev as a flag for freeing gpiochip */
 670                        pca955x->gpio.parent = NULL;
 671                        dev_warn(&client->dev, "could not add gpiochip\n");
 672                        return err;
 673                }
 674                dev_info(&client->dev, "gpios %i...%i\n",
 675                         pca955x->gpio.base, pca955x->gpio.base +
 676                         pca955x->gpio.ngpio - 1);
 677        }
 678#endif
 679
 680        return 0;
 681}
 682
 683static struct i2c_driver pca955x_driver = {
 684        .driver = {
 685                .name   = "leds-pca955x",
 686                .of_match_table = of_pca955x_match,
 687        },
 688        .probe_new = pca955x_probe,
 689        .id_table = pca955x_id,
 690};
 691
 692module_i2c_driver(pca955x_driver);
 693
 694MODULE_AUTHOR("Nate Case <ncase@xes-inc.com>");
 695MODULE_DESCRIPTION("PCA955x LED driver");
 696MODULE_LICENSE("GPL v2");
 697