gpio: octeon: use gpiochip data pointer
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 7 Dec 2015 10:13:27 +0000 (11:13 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 5 Jan 2016 10:21:10 +0000 (11:21 +0100)
This makes the driver use the data pointer added to the gpio_chip
to store a pointer to the state container instead of relying on
container_of().

Reviewed-by: David Daney <david.daney@cavium.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-octeon.c

index afbb2417dfbca70872889ed61595d0525e935401..7665ebcd0c1d7be77be57338aa2065d63463e3eb 100644 (file)
@@ -41,7 +41,7 @@ struct octeon_gpio {
 
 static int octeon_gpio_dir_in(struct gpio_chip *chip, unsigned offset)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
 
        cvmx_write_csr(gpio->register_base + bit_cfg_reg(offset), 0);
        return 0;
@@ -49,7 +49,7 @@ static int octeon_gpio_dir_in(struct gpio_chip *chip, unsigned offset)
 
 static void octeon_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
        u64 mask = 1ull << offset;
        u64 reg = gpio->register_base + (value ? TX_SET : TX_CLEAR);
        cvmx_write_csr(reg, mask);
@@ -58,7 +58,7 @@ static void octeon_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
 static int octeon_gpio_dir_out(struct gpio_chip *chip, unsigned offset,
                               int value)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
        union cvmx_gpio_bit_cfgx cfgx;
 
        octeon_gpio_set(chip, offset, value);
@@ -72,7 +72,7 @@ static int octeon_gpio_dir_out(struct gpio_chip *chip, unsigned offset,
 
 static int octeon_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
-       struct octeon_gpio *gpio = container_of(chip, struct octeon_gpio, chip);
+       struct octeon_gpio *gpio = gpiochip_get_data(chip);
        u64 read_bits = cvmx_read_csr(gpio->register_base + RX_DAT);
 
        return ((1ull << offset) & read_bits) != 0;
@@ -117,7 +117,7 @@ static int octeon_gpio_probe(struct platform_device *pdev)
        chip->get = octeon_gpio_get;
        chip->direction_output = octeon_gpio_dir_out;
        chip->set = octeon_gpio_set;
-       err = gpiochip_add(chip);
+       err = gpiochip_add_data(chip, gpio);
        if (err)
                goto out;