Hi Michal,
FYI, the error/warning still remains.
tree:
https://github.com/Xilinx/linux-xlnx master
head: 6d1ffa89fc67781a31f8119d6bf3748ef23bdf9a
commit: 8a0be21c42a2613cc1b9ddb339447b9fe199134b [48/158] Merge remote-tracking branch
'xlnx_rebase_v5.4' into master-next-test
config: i386-randconfig-d002-20200312 (attached as .config)
compiler: gcc-7 (Debian 7.5.0-5) 7.5.0
reproduce:
git checkout 8a0be21c42a2613cc1b9ddb339447b9fe199134b
# save the attached .config to linux build tree
make ARCH=i386
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
> drivers/gpio/gpio-xilinx.c:68:25: error: field 'mmchip'
has incomplete type
struct of_mm_gpio_chip mmchip;
^~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_get':
> drivers/gpio/gpio-xilinx.c:94:34: error: implicit declaration of
function 'to_of_mm_gpio_chip' [-Werror=implicit-function-declaration]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c:94:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
In file included from arch/x86/include/asm/bitops.h:16:0,
from include/linux/bitops.h:26,
from drivers/gpio/gpio-xilinx.c:15:
> include/linux/kernel.h:994:32: error: dereferencing pointer to
incomplete type 'struct of_mm_gpio_chip'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~
include/linux/compiler.h:330:9: note: in definition of macro
'__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
include/linux/compiler.h:350:2: note: in expansion of macro
'_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro
'compiletime_assert'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^~~~~~~~~~~~~~~~~~
include/linux/kernel.h:994:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~~~~~~
include/linux/kernel.h:994:20: note: in expansion of macro '__same_type'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~
drivers/gpio/gpio-xilinx.c:96:6: note: in expansion of macro 'container_of'
container_of(mm_gc, struct xgpio_instance, mmchip);
^~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_set':
drivers/gpio/gpio-xilinx.c:115:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_set_multiple':
drivers/gpio/gpio-xilinx.c:147:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_dir_in':
drivers/gpio/gpio-xilinx.c:187:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_dir_out':
drivers/gpio/gpio-xilinx.c:218:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_xlate':
drivers/gpio/gpio-xilinx.c:274:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
> drivers/gpio/gpio-xilinx.c:277:8: error: 'struct
gpio_chip' has no member named 'of_gpio_n_cells'
if
(gc->of_gpio_n_cells == 3 && flags)
^~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_to_irq':
drivers/gpio/gpio-xilinx.c:392:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers/gpio/gpio-xilinx.c: In function 'xgpio_remove':
> drivers/gpio/gpio-xilinx.c:576:2: error: implicit declaration of
function 'of_mm_gpiochip_remove'; did you mean 'gpiochip_remove'?
[-Werror=implicit-function-declaration]
of_mm_gpiochip_remove(&chip->mmchip);
^~~~~~~~~~~~~~~~~~~~~
gpiochip_remove
drivers/gpio/gpio-xilinx.c: In function 'xgpio_of_probe':
> drivers/gpio/gpio-xilinx.c:676:11: error: implicit declaration of
function 'of_mm_gpiochip_add'; did you mean 'gpiochip_add'?
[-Werror=implicit-function-declaration]
status = of_mm_gpiochip_add(np,
&chip->mmchip);
^~~~~~~~~~~~~~~~~~
gpiochip_add
cc1: some warnings being treated as errors
--
drivers//gpio/gpio-xilinx.c:68:25: error: field 'mmchip' has incomplete type
struct of_mm_gpio_chip mmchip;
^~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_get':
drivers//gpio/gpio-xilinx.c:94:34: error: implicit declaration of function
'to_of_mm_gpio_chip' [-Werror=implicit-function-declaration]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c:94:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
In file included from arch/x86/include/asm/bitops.h:16:0,
from include/linux/bitops.h:26,
from drivers//gpio/gpio-xilinx.c:15:
> include/linux/kernel.h:994:32: error: dereferencing pointer to
incomplete type 'struct of_mm_gpio_chip'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~
include/linux/compiler.h:330:9: note: in definition of macro
'__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
include/linux/compiler.h:350:2: note: in expansion of macro
'_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro
'compiletime_assert'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^~~~~~~~~~~~~~~~~~
include/linux/kernel.h:994:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~~~~~~
include/linux/kernel.h:994:20: note: in expansion of macro '__same_type'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~
drivers//gpio/gpio-xilinx.c:96:6: note: in expansion of macro 'container_of'
container_of(mm_gc, struct xgpio_instance, mmchip);
^~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_set':
drivers//gpio/gpio-xilinx.c:115:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_set_multiple':
drivers//gpio/gpio-xilinx.c:147:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_dir_in':
drivers//gpio/gpio-xilinx.c:187:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_dir_out':
drivers//gpio/gpio-xilinx.c:218:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_xlate':
drivers//gpio/gpio-xilinx.c:274:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c:277:8: error: 'struct gpio_chip' has no member
named 'of_gpio_n_cells'
if (gc->of_gpio_n_cells == 3 && flags)
^~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_to_irq':
drivers//gpio/gpio-xilinx.c:392:34: warning: initialization makes pointer from integer
without a cast [-Wint-conversion]
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
^~~~~~~~~~~~~~~~~~
drivers//gpio/gpio-xilinx.c: In function 'xgpio_remove':
drivers//gpio/gpio-xilinx.c:576:2: error: implicit declaration of function
'of_mm_gpiochip_remove'; did you mean 'gpiochip_remove'?
[-Werror=implicit-function-declaration]
of_mm_gpiochip_remove(&chip->mmchip);
^~~~~~~~~~~~~~~~~~~~~
gpiochip_remove
drivers//gpio/gpio-xilinx.c: In function 'xgpio_of_probe':
drivers//gpio/gpio-xilinx.c:676:11: error: implicit declaration of function
'of_mm_gpiochip_add'; did you mean 'gpiochip_add'?
[-Werror=implicit-function-declaration]
status = of_mm_gpiochip_add(np, &chip->mmchip);
^~~~~~~~~~~~~~~~~~
gpiochip_add
cc1: some warnings being treated as errors
vim +/mmchip +68 drivers/gpio/gpio-xilinx.c
e9a98626baf3b3 drivers/gpio/gpio-xilinx.c John Linn 2012-06-29 52
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 53 /**
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 54 * struct
xgpio_instance - Stores information about GPIO device
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 55 * @mmchip:
OF GPIO chip for memory mapped banks
7c9997cc698ba9 drivers/gpio/gpio-xilinx.c Nava kishore Manne 2018-10-16 56 *
@mmchip_dual: Pointer to the OF dual gpio chip
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 57 *
@gpio_state: GPIO state shadow register
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 58 *
@gpio_dir: GPIO direction shadow register
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 59 * @offset:
GPIO channel offset
796ae5e3e4ae5f drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 60 *
@irq_base: GPIO channel irq base address
796ae5e3e4ae5f drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 61 *
@irq_enable: GPIO irq enable/disable bitfield
184f4682479b34 drivers/gpio/gpio-xilinx.c Shubhrajyoti Datta 2018-05-03 62 * @no_init:
No intitialisation at probe
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 63 *
@gpio_lock: Lock used for synchronization
796ae5e3e4ae5f drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 64 *
@irq_domain: irq_domain of the controller
34b6b71b142476 drivers/gpio/gpio-xilinx.c Maulik Jodhani 2017-02-10 65 * @clk:
clock resource for this driver
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 66 */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 67 struct
xgpio_instance {
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 @68 struct
of_mm_gpio_chip mmchip;
7c9997cc698ba9 drivers/gpio/gpio-xilinx.c Nava kishore Manne 2018-10-16 69 struct
of_mm_gpio_chip *mmchip_dual;
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 70 u32
gpio_state;
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 71 u32
gpio_dir;
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 72 u32
offset;
32161b344f3eb8 drivers/gpio/gpio-xilinx.c Michal Simek 2013-09-03 73 int
irq_base;
796ae5e3e4ae5f drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 74 u32
irq_enable;
184f4682479b34 drivers/gpio/gpio-xilinx.c Shubhrajyoti Datta 2018-05-03 75 bool
no_init;
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 76 spinlock_t
gpio_lock;
796ae5e3e4ae5f drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 77 struct
irq_domain *irq_domain;
34b6b71b142476 drivers/gpio/gpio-xilinx.c Maulik Jodhani 2017-02-10 78 struct clk
*clk;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 79 };
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 80
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 81 /**
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 82 * xgpio_get
- Read the specified signal of the GPIO device.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 83 * @gc:
Pointer to gpio_chip device structure.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 84 * @gpio:
GPIO signal number.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 85 *
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 86 * This
function reads the specified signal of the GPIO device.
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 87 *
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 88 * Return:
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 89 * 0 if
direction of GPIO signals is set as input otherwise it
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 90 * returns
negative error value.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 91 */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 92 static int
xgpio_get(struct gpio_chip *gc, unsigned int gpio)
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 93 {
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 @94 struct
of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 95 struct
xgpio_instance *chip =
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 96
container_of(mm_gc, struct xgpio_instance, mmchip);
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 97
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 98 void
__iomem *regs = mm_gc->regs + chip->offset;
324c11445a4877 drivers/gpio/gpio-xilinx.c Michal Simek 2012-11-27 99
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 100 return
!!(xgpio_readreg(regs + XGPIO_DATA_OFFSET) & BIT(gpio));
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 101 }
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 102
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 103 /**
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 104 * xgpio_set
- Write the specified signal of the GPIO device.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 105 * @gc:
Pointer to gpio_chip device structure.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 106 * @gpio:
GPIO signal number.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 107 * @val:
Value to be written to specified signal.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 108 *
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 109 * This
function writes the specified value in to the specified signal of the
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 110 * GPIO
device.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 111 */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 112 static void
xgpio_set(struct gpio_chip *gc, unsigned int gpio, int val)
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 113 {
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 114 unsigned
long flags;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 115 struct
of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 116 struct
xgpio_instance *chip =
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 117
container_of(mm_gc, struct xgpio_instance, mmchip);
e9a98626baf3b3 drivers/gpio/gpio-xilinx.c John Linn 2012-06-29 118 void
__iomem *regs = mm_gc->regs;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 119
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 120
spin_lock_irqsave(&chip->gpio_lock, flags);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 121
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 122 /* Write to
GPIO signal and set its direction to output */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 123 if (val)
568fae334bb6ea drivers/gpio/gpio-xilinx.c Michal Simek 2013-06-03 124
chip->gpio_state |= BIT(gpio);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 125 else
568fae334bb6ea drivers/gpio/gpio-xilinx.c Michal Simek 2013-06-03 126
chip->gpio_state &= ~BIT(gpio);
e9a98626baf3b3 drivers/gpio/gpio-xilinx.c John Linn 2012-06-29 127
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 128
xgpio_writereg(regs + chip->offset + XGPIO_DATA_OFFSET,
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 129
chip->gpio_state);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 130
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 131
spin_unlock_irqrestore(&chip->gpio_lock, flags);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 132 }
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 133
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 134 /**
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 135 *
xgpio_set_multiple - Write the specified signals of the GPIO device.
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 136 * @gc:
Pointer to gpio_chip device structure.
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 137 * @mask:
Mask of the GPIOS to modify.
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 138 * @bits:
Value to be wrote on each GPIO
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 139 *
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 140 * This
function writes the specified values into the specified signals of the
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 141 * GPIO
devices.
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 142 */
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 143 static void
xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 144
unsigned long *bits)
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 145 {
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 146 unsigned
long flags;
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 147 struct
of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 148 struct
xgpio_instance *chip =
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 149
container_of(mm_gc, struct xgpio_instance, mmchip);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 150 void
__iomem *regs = mm_gc->regs;
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 151 int i;
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 152
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 153
spin_lock_irqsave(&chip->gpio_lock, flags);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 154
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 155 /* Write to
GPIO signals */
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 156 for (i = 0;
i < gc->ngpio; i++) {
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 157 if (*mask
== 0)
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 158 break;
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 159 if
(__test_and_clear_bit(i, mask)) {
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 160 if
(test_bit(i, bits))
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 161
chip->gpio_state |= BIT(i);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 162 else
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 163
chip->gpio_state &= ~BIT(i);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 164 }
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 165 }
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 166
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 167
xgpio_writereg(regs + chip->offset + XGPIO_DATA_OFFSET,
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 168
chip->gpio_state);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 169
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 170
spin_unlock_irqrestore(&chip->gpio_lock, flags);
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 171 }
63bcc8b82965b1 drivers/gpio/gpio-xilinx.c Iban Rodriguez 2016-05-13 172
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 173 /**
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 174 *
xgpio_dir_in - Set the direction of the specified GPIO signal as input.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 175 * @gc:
Pointer to gpio_chip device structure.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 176 * @gpio:
GPIO signal number.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 177 *
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 178 * This
function sets the direction of specified GPIO signal as input.
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 179 *
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 180 * Return:
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 181 * 0 - if
direction of GPIO signals is set as input
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 182 * otherwise
it returns negative error value.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 183 */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 184 static int
xgpio_dir_in(struct gpio_chip *gc, unsigned int gpio)
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 185 {
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 186 unsigned
long flags;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 187 struct
of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 188 struct
xgpio_instance *chip =
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 189
container_of(mm_gc, struct xgpio_instance, mmchip);
e9a98626baf3b3 drivers/gpio/gpio-xilinx.c John Linn 2012-06-29 190 void
__iomem *regs = mm_gc->regs;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 191
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 192
spin_lock_irqsave(&chip->gpio_lock, flags);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 193
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 194 /* Set the
GPIO bit in shadow register and set direction as input */
568fae334bb6ea drivers/gpio/gpio-xilinx.c Michal Simek 2013-06-03 195
chip->gpio_dir |= BIT(gpio);
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 196
xgpio_writereg(regs + chip->offset + XGPIO_TRI_OFFSET, chip->gpio_dir);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 197
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 198
spin_unlock_irqrestore(&chip->gpio_lock, flags);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 199
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 200 return 0;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 201 }
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 202
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 203 /**
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 204 *
xgpio_dir_out - Set the direction of the specified GPIO signal as output.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 205 * @gc:
Pointer to gpio_chip device structure.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 206 * @gpio:
GPIO signal number.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 207 * @val:
Value to be written to specified signal.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 208 *
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 209 * This
function sets the direction of specified GPIO signal as output.
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 210 *
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 211 * Return:
8fd1942dec9edd drivers/gpio/gpio-xilinx.c Michal Simek 2013-07-19 212 * If all
GPIO signals of GPIO chip is configured as input then it returns
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 213 * error
otherwise it returns 0.
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 214 */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 215 static int
xgpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 216 {
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 217 unsigned
long flags;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 @218 struct
of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 219 struct
xgpio_instance *chip =
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 220
container_of(mm_gc, struct xgpio_instance, mmchip);
e9a98626baf3b3 drivers/gpio/gpio-xilinx.c John Linn 2012-06-29 221 void
__iomem *regs = mm_gc->regs;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 222
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 223
spin_lock_irqsave(&chip->gpio_lock, flags);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 224
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 225 /* Write
state of GPIO signal */
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 226 if (val)
568fae334bb6ea drivers/gpio/gpio-xilinx.c Michal Simek 2013-06-03 227
chip->gpio_state |= BIT(gpio);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 228 else
568fae334bb6ea drivers/gpio/gpio-xilinx.c Michal Simek 2013-06-03 229
chip->gpio_state &= ~BIT(gpio);
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 230
xgpio_writereg(regs + chip->offset + XGPIO_DATA_OFFSET,
b23d352f6774a3 drivers/gpio/gpio-xilinx.c Michal Simek 2013-05-29 231
chip->gpio_state);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 232
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 233 /* Clear
the GPIO bit in shadow register and set direction as output */
568fae334bb6ea drivers/gpio/gpio-xilinx.c Michal Simek 2013-06-03 234
chip->gpio_dir &= ~BIT(gpio);
fb2379e7035e98 drivers/gpio/gpio-xilinx.c Michal Simek 2012-10-19 235
xgpio_writereg(regs + chip->offset + XGPIO_TRI_OFFSET, chip->gpio_dir);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 236
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 237
spin_unlock_irqrestore(&chip->gpio_lock, flags);
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 238
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 239 return 0;
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 240 }
0bcb6069a6e1af drivers/gpio/xilinx_gpio.c John Linn 2008-11-12 241
:::::: The code at line 68 was first introduced by commit
:::::: 0bcb6069a6e1af5c114a2a8873ec43ada8933596 GPIO: add new Xilinx driver for powerpc
:::::: TO: John Linn <john.linn(a)xilinx.com>
:::::: CC: Linus Torvalds <torvalds(a)linux-foundation.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org