Re: [PATCH v2] staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface

2018-11-03 Thread kbuild test robot
Hi Nishad,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.19 next-20181102]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nishad-Kamdar/staging-olpc_dcon-olpc_dcon_xo_1-c-Switch-to-the-gpio-descriptor-interface/20181104-041335
config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

All error/warnings (new ones prefixed by >>):

>> drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:23:2: error: expected identifier 
>> before numeric constant
 DCON_IRQ,
 ^
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:34:50: error: 'GPIO_ASIS' 
undeclared here (not in a function); did you mean 'GPIOD_ASIS'?
 [DCON_STAT0] = { .name = "dcon_stat0", .flags = GPIO_ASIS },
 ^
 GPIOD_ASIS
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:37:3: error: 'DCON_LOAD' 
undeclared here (not in a function); did you mean 'DCON_STAT1'?
 [DCON_LOAD] = { .name = "dcon_load", .flags = GPIO_ASIS },
  ^
  DCON_STAT1
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:37:3: error: array index in 
initializer not of integer type
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:37:3: note: (near initialization 
for 'gpios_asis')
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:3: error: 'DCON_BLANK' 
undeclared here (not in a function); did you mean 'DCON_LOAD'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
  ^~
  DCON_LOAD
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:3: error: array index in 
initializer not of integer type
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:3: note: (near initialization 
for 'gpios_asis')
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:42: error: 'const struct 
dcon_gpio' has no member named 'flag'; did you mean 'flags'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
 ^~~~
 flags
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c: In function 'dcon_init_xo_1':
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:47:26: warning: initialization 
discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 struct dcon_gpio *pin = _asis[0];
 ^
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:42: error: dereferencing 
pointer to incomplete type 'struct i2c_client'
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
 ^~
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:42: error: request for member 
'dev' in something not a structure or union
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:55: error: invalid type 
argument of '->' (have 'struct dcon_gpio')
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
  ^~
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:55: error: request for member 
'name' in something not a structure or union
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:51:14: error: invalid type 
argument of '->' (have 'struct dcon_gpio')
   pin[i]->flags);
 ^~
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:51:14: error: request for member 
'flags' in something not a structure or union
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:29: error: passing argument 1 
of 'devm_gpiod_get' from incompatible pointer type 
[-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^
   In file included from drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:55: note: expected 'struct device *' but 
argument is of type 'const struct dcon_gpio (*)[1]'
struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
  ^~~   
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:49: error: passing argument 2 
of 'devm_gpiod_get' from incompatible pointer type 
[-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^~~
   In file included from drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:55: note: expected 'const char *' but 
argument is of type 'const struct dcon_gpio *'
struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
  ^~~   
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:51:8: error: incompatible type 
for argument 3 of 'devm_gpiod_get'
   pin[i]->flags);
   

Re: [PATCH v2] staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface

2018-11-03 Thread kbuild test robot
Hi Nishad,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.19 next-20181102]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nishad-Kamdar/staging-olpc_dcon-olpc_dcon_xo_1-c-Switch-to-the-gpio-descriptor-interface/20181104-041335
config: i386-allyesconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

All error/warnings (new ones prefixed by >>):

>> drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:23:2: error: expected identifier 
>> before numeric constant
 DCON_IRQ,
 ^
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:34:50: error: 'GPIO_ASIS' 
undeclared here (not in a function); did you mean 'GPIOD_ASIS'?
 [DCON_STAT0] = { .name = "dcon_stat0", .flags = GPIO_ASIS },
 ^
 GPIOD_ASIS
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:37:3: error: 'DCON_LOAD' 
undeclared here (not in a function); did you mean 'DCON_STAT1'?
 [DCON_LOAD] = { .name = "dcon_load", .flags = GPIO_ASIS },
  ^
  DCON_STAT1
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:37:3: error: array index in 
initializer not of integer type
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:37:3: note: (near initialization 
for 'gpios_asis')
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:3: error: 'DCON_BLANK' 
undeclared here (not in a function); did you mean 'DCON_LOAD'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
  ^~
  DCON_LOAD
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:3: error: array index in 
initializer not of integer type
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:3: note: (near initialization 
for 'gpios_asis')
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:38:42: error: 'const struct 
dcon_gpio' has no member named 'flag'; did you mean 'flags'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
 ^~~~
 flags
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c: In function 'dcon_init_xo_1':
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:47:26: warning: initialization 
discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 struct dcon_gpio *pin = _asis[0];
 ^
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:42: error: dereferencing 
pointer to incomplete type 'struct i2c_client'
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
 ^~
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:42: error: request for member 
'dev' in something not a structure or union
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:55: error: invalid type 
argument of '->' (have 'struct dcon_gpio')
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
  ^~
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:55: error: request for member 
'name' in something not a structure or union
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:51:14: error: invalid type 
argument of '->' (have 'struct dcon_gpio')
   pin[i]->flags);
 ^~
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:51:14: error: request for member 
'flags' in something not a structure or union
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:29: error: passing argument 1 
of 'devm_gpiod_get' from incompatible pointer type 
[-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^
   In file included from drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:55: note: expected 'struct device *' but 
argument is of type 'const struct dcon_gpio (*)[1]'
struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
  ^~~   
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:50:49: error: passing argument 2 
of 'devm_gpiod_get' from incompatible pointer type 
[-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^~~
   In file included from drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:55: note: expected 'const char *' but 
argument is of type 'const struct dcon_gpio *'
struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
  ^~~   
   drivers/staging//olpc_dcon/olpc_dcon_xo_1.c:51:8: error: incompatible type 
for argument 3 of 'devm_gpiod_get'
   pin[i]->flags);
   

Re: [PATCH v2] staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface

2018-11-03 Thread kbuild test robot
Hi Nishad,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.19 next-20181102]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nishad-Kamdar/staging-olpc_dcon-olpc_dcon_xo_1-c-Switch-to-the-gpio-descriptor-interface/20181104-041335
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:18:0:
>> drivers/staging/olpc_dcon/olpc_dcon.h:58:33: error: expected identifier 
>> before numeric constant
#define DCON_IRQ6
^
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:23:2: note: in expansion of macro 
>> 'DCON_IRQ'
 DCON_IRQ,
 ^~~~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:34:50: error: 'GPIO_ASIS' 
>> undeclared here (not in a function); did you mean 'GPIOD_ASIS'?
 [DCON_STAT0] = { .name = "dcon_stat0", .flags = GPIO_ASIS },
 ^
 GPIOD_ASIS
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:37:3: error: 'DCON_LOAD' 
>> undeclared here (not in a function); did you mean 'DCON_STAT1'?
 [DCON_LOAD] = { .name = "dcon_load", .flags = GPIO_ASIS },
  ^
  DCON_STAT1
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:37:3: error: array index in 
>> initializer not of integer type
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:37:3: note: (near initialization 
for 'gpios_asis')
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:3: error: 'DCON_BLANK' 
>> undeclared here (not in a function); did you mean 'DCON_LOAD'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
  ^~
  DCON_LOAD
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:3: error: array index in 
initializer not of integer type
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:3: note: (near initialization 
for 'gpios_asis')
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:42: error: 'const struct 
>> dcon_gpio' has no member named 'flag'; did you mean 'flags'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
 ^~~~
 flags
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c: In function 'dcon_init_xo_1':
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:47:26: warning: initialization 
>> discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 struct dcon_gpio *pin = _asis[0];
 ^
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:42: error: dereferencing 
>> pointer to incomplete type 'struct i2c_client'
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
 ^~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:42: error: request for member 
>> 'dev' in something not a structure or union
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:55: error: invalid type 
>> argument of '->' (have 'struct dcon_gpio')
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
  ^~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:55: error: request for member 
>> 'name' in something not a structure or union
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:51:14: error: invalid type 
argument of '->' (have 'struct dcon_gpio')
   pin[i]->flags);
 ^~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:51:14: error: request for member 
>> 'flags' in something not a structure or union
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:29: error: passing argument 1 
>> of 'devm_gpiod_get' from incompatible pointer type 
>> [-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^
   In file included from drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:32: note: expected 'struct device *' but 
argument is of type 'const struct dcon_gpio (*)[1]'
struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
   ^~
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:49: error: passing argument 2 
of 'devm_gpiod_get' from incompatible pointer type 
[-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^~~
   In file included from drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:32: note: expected 'const char *' but 
argument is of type 'const struct dcon_gpio *'
struct gpio_desc *__must_check 

Re: [PATCH v2] staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface

2018-11-03 Thread kbuild test robot
Hi Nishad,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.19 next-20181102]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Nishad-Kamdar/staging-olpc_dcon-olpc_dcon_xo_1-c-Switch-to-the-gpio-descriptor-interface/20181104-041335
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

All error/warnings (new ones prefixed by >>):

   In file included from drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:18:0:
>> drivers/staging/olpc_dcon/olpc_dcon.h:58:33: error: expected identifier 
>> before numeric constant
#define DCON_IRQ6
^
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:23:2: note: in expansion of macro 
>> 'DCON_IRQ'
 DCON_IRQ,
 ^~~~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:34:50: error: 'GPIO_ASIS' 
>> undeclared here (not in a function); did you mean 'GPIOD_ASIS'?
 [DCON_STAT0] = { .name = "dcon_stat0", .flags = GPIO_ASIS },
 ^
 GPIOD_ASIS
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:37:3: error: 'DCON_LOAD' 
>> undeclared here (not in a function); did you mean 'DCON_STAT1'?
 [DCON_LOAD] = { .name = "dcon_load", .flags = GPIO_ASIS },
  ^
  DCON_STAT1
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:37:3: error: array index in 
>> initializer not of integer type
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:37:3: note: (near initialization 
for 'gpios_asis')
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:3: error: 'DCON_BLANK' 
>> undeclared here (not in a function); did you mean 'DCON_LOAD'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
  ^~
  DCON_LOAD
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:3: error: array index in 
initializer not of integer type
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:3: note: (near initialization 
for 'gpios_asis')
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:38:42: error: 'const struct 
>> dcon_gpio' has no member named 'flag'; did you mean 'flags'?
 [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
 ^~~~
 flags
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c: In function 'dcon_init_xo_1':
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:47:26: warning: initialization 
>> discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
 struct dcon_gpio *pin = _asis[0];
 ^
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:42: error: dereferencing 
>> pointer to incomplete type 'struct i2c_client'
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
 ^~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:42: error: request for member 
>> 'dev' in something not a structure or union
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:55: error: invalid type 
>> argument of '->' (have 'struct dcon_gpio')
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
  ^~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:55: error: request for member 
>> 'name' in something not a structure or union
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:51:14: error: invalid type 
argument of '->' (have 'struct dcon_gpio')
   pin[i]->flags);
 ^~
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:51:14: error: request for member 
>> 'flags' in something not a structure or union
>> drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:29: error: passing argument 1 
>> of 'devm_gpiod_get' from incompatible pointer type 
>> [-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^
   In file included from drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:32: note: expected 'struct device *' but 
argument is of type 'const struct dcon_gpio (*)[1]'
struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
   ^~
   drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:50:49: error: passing argument 2 
of 'devm_gpiod_get' from incompatible pointer type 
[-Werror=incompatible-pointer-types]
  gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
^~~
   In file included from drivers/staging/olpc_dcon/olpc_dcon_xo_1.c:14:0:
   include/linux/gpio/consumer.h:87:32: note: expected 'const char *' but 
argument is of type 'const struct dcon_gpio *'
struct gpio_desc *__must_check 

[PATCH v2] staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface

2018-11-03 Thread Nishad Kamdar
Use the gpiod interface instead of the deprecated old non-descriptor
interface in olpc_dcon_xo_1.c.
---
Changes in v2:
 - Resolve a few compilation errors.
 - Add a level of indirection to read and write gpios.
Signed-off-by: Nishad Kamdar 
---
 drivers/staging/olpc_dcon/olpc_dcon_xo_1.c | 89 +++---
 1 file changed, 46 insertions(+), 43 deletions(-)

diff --git a/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c 
b/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
index ff145d493e1b..29b93897ccae 100644
--- a/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
+++ b/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
@@ -11,35 +11,50 @@
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include 
-#include 
+#include 
 #include 
 #include 
 
 #include "olpc_dcon.h"
 
+enum dcon_gpios {
+   DCON_STAT0,
+   DCON_STAT1,
+   DCON_IRQ,
+   DCON_LOAD,
+   DCON_BLANK,
+};
+
+struct dcon_gpio {
+   const char *name;
+   unsigned long flags;
+};
+
+static const struct dcon_gpio gpios_asis[] = {
+   [DCON_STAT0] = { .name = "dcon_stat0", .flags = GPIO_ASIS },
+   [DCON_STAT1] = { .name = "dcon_stat1", .flags = GPIO_ASIS },
+   [DCON_IRQ] = { .name = "dcon_irq", .flags = GPIO_ASIS },
+   [DCON_LOAD] = { .name = "dcon_load", .flags = GPIO_ASIS },
+   [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
+};
+
+struct gpio_desc *gpios[5];
+
 static int dcon_init_xo_1(struct dcon_priv *dcon)
 {
unsigned char lob;
-
-   if (gpio_request(OLPC_GPIO_DCON_STAT0, "OLPC-DCON")) {
-   pr_err("failed to request STAT0 GPIO\n");
-   return -EIO;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_STAT1, "OLPC-DCON")) {
-   pr_err("failed to request STAT1 GPIO\n");
-   goto err_gp_stat1;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_IRQ, "OLPC-DCON")) {
-   pr_err("failed to request IRQ GPIO\n");
-   goto err_gp_irq;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_LOAD, "OLPC-DCON")) {
-   pr_err("failed to request LOAD GPIO\n");
-   goto err_gp_load;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_BLANK, "OLPC-DCON")) {
-   pr_err("failed to request BLANK GPIO\n");
-   goto err_gp_blank;
+   int ret, i;
+   struct dcon_gpio *pin = _asis[0];
+
+   for (i = 0; i < ARRAY_SIZE(gpios_asis); i++) {
+   gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
+ pin[i]->flags);
+   if (IS_ERR(gpios[i])) {
+   ret = PTR_ERR(gpios[i]);
+   pr_err("failed to request %s GPIO: %d\n", pin[i]->name,
+  ret);
+   return ret;
+   }
}
 
/* Turn off the event enable for GPIO7 just to be safe */
@@ -61,12 +76,12 @@ static int dcon_init_xo_1(struct dcon_priv *dcon)
dcon->pending_src = dcon->curr_src;
 
/* Set the directions for the GPIO pins */
-   gpio_direction_input(OLPC_GPIO_DCON_STAT0);
-   gpio_direction_input(OLPC_GPIO_DCON_STAT1);
-   gpio_direction_input(OLPC_GPIO_DCON_IRQ);
-   gpio_direction_input(OLPC_GPIO_DCON_BLANK);
-   gpio_direction_output(OLPC_GPIO_DCON_LOAD,
- dcon->curr_src == DCON_SOURCE_CPU);
+   gpiod_direction_input(gpios[DCON_STAT0]);
+   gpiod_direction_input(gpios[DCON_STAT1]);
+   gpiod_direction_input(gpios[DCON_IRQ]);
+   gpiod_direction_input(gpios[DCON_BLANK]);
+   gpiod_direction_output(gpios[DCON_LOAD],
+  dcon->curr_src == DCON_SOURCE_CPU);
 
/* Set up the interrupt mappings */
 
@@ -84,7 +99,7 @@ static int dcon_init_xo_1(struct dcon_priv *dcon)
/* Register the interrupt handler */
if (request_irq(DCON_IRQ, _interrupt, 0, "DCON", dcon)) {
pr_err("failed to request DCON's irq\n");
-   goto err_req_irq;
+   return -EIO;
}
 
/* Clear INV_EN for GPIO7 (DCONIRQ) */
@@ -125,18 +140,6 @@ static int dcon_init_xo_1(struct dcon_priv *dcon)
cs5535_gpio_set(OLPC_GPIO_DCON_BLANK, GPIO_EVENTS_ENABLE);
 
return 0;
-
-err_req_irq:
-   gpio_free(OLPC_GPIO_DCON_BLANK);
-err_gp_blank:
-   gpio_free(OLPC_GPIO_DCON_LOAD);
-err_gp_load:
-   gpio_free(OLPC_GPIO_DCON_IRQ);
-err_gp_irq:
-   gpio_free(OLPC_GPIO_DCON_STAT1);
-err_gp_stat1:
-   gpio_free(OLPC_GPIO_DCON_STAT0);
-   return -EIO;
 }
 
 static void dcon_wiggle_xo_1(void)
@@ -180,13 +183,13 @@ static void dcon_wiggle_xo_1(void)
 
 static void dcon_set_dconload_1(int val)
 {
-   gpio_set_value(OLPC_GPIO_DCON_LOAD, val);
+   gpiod_set_value(gpios[DCON_LOAD], val);
 }
 
 static int dcon_read_status_xo_1(u8 *status)
 {
-   *status = gpio_get_value(OLPC_GPIO_DCON_STAT0);
-   *status |= gpio_get_value(OLPC_GPIO_DCON_STAT1) << 1;
+   *status = gpiod_get_value(gpios[DCON_STAT0]);
+  

[PATCH v2] staging: olpc_dcon: olpc_dcon_xo_1.c: Switch to the gpio descriptor interface

2018-11-03 Thread Nishad Kamdar
Use the gpiod interface instead of the deprecated old non-descriptor
interface in olpc_dcon_xo_1.c.
---
Changes in v2:
 - Resolve a few compilation errors.
 - Add a level of indirection to read and write gpios.
Signed-off-by: Nishad Kamdar 
---
 drivers/staging/olpc_dcon/olpc_dcon_xo_1.c | 89 +++---
 1 file changed, 46 insertions(+), 43 deletions(-)

diff --git a/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c 
b/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
index ff145d493e1b..29b93897ccae 100644
--- a/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
+++ b/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
@@ -11,35 +11,50 @@
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include 
-#include 
+#include 
 #include 
 #include 
 
 #include "olpc_dcon.h"
 
+enum dcon_gpios {
+   DCON_STAT0,
+   DCON_STAT1,
+   DCON_IRQ,
+   DCON_LOAD,
+   DCON_BLANK,
+};
+
+struct dcon_gpio {
+   const char *name;
+   unsigned long flags;
+};
+
+static const struct dcon_gpio gpios_asis[] = {
+   [DCON_STAT0] = { .name = "dcon_stat0", .flags = GPIO_ASIS },
+   [DCON_STAT1] = { .name = "dcon_stat1", .flags = GPIO_ASIS },
+   [DCON_IRQ] = { .name = "dcon_irq", .flags = GPIO_ASIS },
+   [DCON_LOAD] = { .name = "dcon_load", .flags = GPIO_ASIS },
+   [DCON_BLANK] = { .name = "dcon_blank", .flag = GPIO_ASIS },
+};
+
+struct gpio_desc *gpios[5];
+
 static int dcon_init_xo_1(struct dcon_priv *dcon)
 {
unsigned char lob;
-
-   if (gpio_request(OLPC_GPIO_DCON_STAT0, "OLPC-DCON")) {
-   pr_err("failed to request STAT0 GPIO\n");
-   return -EIO;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_STAT1, "OLPC-DCON")) {
-   pr_err("failed to request STAT1 GPIO\n");
-   goto err_gp_stat1;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_IRQ, "OLPC-DCON")) {
-   pr_err("failed to request IRQ GPIO\n");
-   goto err_gp_irq;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_LOAD, "OLPC-DCON")) {
-   pr_err("failed to request LOAD GPIO\n");
-   goto err_gp_load;
-   }
-   if (gpio_request(OLPC_GPIO_DCON_BLANK, "OLPC-DCON")) {
-   pr_err("failed to request BLANK GPIO\n");
-   goto err_gp_blank;
+   int ret, i;
+   struct dcon_gpio *pin = _asis[0];
+
+   for (i = 0; i < ARRAY_SIZE(gpios_asis); i++) {
+   gpios[i] = devm_gpiod_get(>client->dev, pin[i]->name,
+ pin[i]->flags);
+   if (IS_ERR(gpios[i])) {
+   ret = PTR_ERR(gpios[i]);
+   pr_err("failed to request %s GPIO: %d\n", pin[i]->name,
+  ret);
+   return ret;
+   }
}
 
/* Turn off the event enable for GPIO7 just to be safe */
@@ -61,12 +76,12 @@ static int dcon_init_xo_1(struct dcon_priv *dcon)
dcon->pending_src = dcon->curr_src;
 
/* Set the directions for the GPIO pins */
-   gpio_direction_input(OLPC_GPIO_DCON_STAT0);
-   gpio_direction_input(OLPC_GPIO_DCON_STAT1);
-   gpio_direction_input(OLPC_GPIO_DCON_IRQ);
-   gpio_direction_input(OLPC_GPIO_DCON_BLANK);
-   gpio_direction_output(OLPC_GPIO_DCON_LOAD,
- dcon->curr_src == DCON_SOURCE_CPU);
+   gpiod_direction_input(gpios[DCON_STAT0]);
+   gpiod_direction_input(gpios[DCON_STAT1]);
+   gpiod_direction_input(gpios[DCON_IRQ]);
+   gpiod_direction_input(gpios[DCON_BLANK]);
+   gpiod_direction_output(gpios[DCON_LOAD],
+  dcon->curr_src == DCON_SOURCE_CPU);
 
/* Set up the interrupt mappings */
 
@@ -84,7 +99,7 @@ static int dcon_init_xo_1(struct dcon_priv *dcon)
/* Register the interrupt handler */
if (request_irq(DCON_IRQ, _interrupt, 0, "DCON", dcon)) {
pr_err("failed to request DCON's irq\n");
-   goto err_req_irq;
+   return -EIO;
}
 
/* Clear INV_EN for GPIO7 (DCONIRQ) */
@@ -125,18 +140,6 @@ static int dcon_init_xo_1(struct dcon_priv *dcon)
cs5535_gpio_set(OLPC_GPIO_DCON_BLANK, GPIO_EVENTS_ENABLE);
 
return 0;
-
-err_req_irq:
-   gpio_free(OLPC_GPIO_DCON_BLANK);
-err_gp_blank:
-   gpio_free(OLPC_GPIO_DCON_LOAD);
-err_gp_load:
-   gpio_free(OLPC_GPIO_DCON_IRQ);
-err_gp_irq:
-   gpio_free(OLPC_GPIO_DCON_STAT1);
-err_gp_stat1:
-   gpio_free(OLPC_GPIO_DCON_STAT0);
-   return -EIO;
 }
 
 static void dcon_wiggle_xo_1(void)
@@ -180,13 +183,13 @@ static void dcon_wiggle_xo_1(void)
 
 static void dcon_set_dconload_1(int val)
 {
-   gpio_set_value(OLPC_GPIO_DCON_LOAD, val);
+   gpiod_set_value(gpios[DCON_LOAD], val);
 }
 
 static int dcon_read_status_xo_1(u8 *status)
 {
-   *status = gpio_get_value(OLPC_GPIO_DCON_STAT0);
-   *status |= gpio_get_value(OLPC_GPIO_DCON_STAT1) << 1;
+   *status = gpiod_get_value(gpios[DCON_STAT0]);
+