[xlnx:master 48/53] drivers//gpio/gpio-xilinx.c:68:25: error: field 'mmchip' has incomplete type

From: kbuild test robot <hidden>
Date: 2020-02-24 21:46:24
Also in: oe-kbuild-all

tree:   https://github.com/Xilinx/linux-xlnx master
head:   0bf5e5fe96bf3663f5d47e01d7f8d0e4d737e492
commit: 8a0be21c42a2613cc1b9ddb339447b9fe199134b [48/53] Merge remote-tracking branch 'xlnx_rebase_v5.4' into master-next-test
config: i386-randconfig-f001-20200224 (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 <redacted>

All error/warnings (new ones prefixed by >>):
quoted
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':
quoted
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:
quoted
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) && \
                       ^~~~~~~~~~~
quoted
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);
                                     ^~~~~~~~~~~~~~~~~~
quoted
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':
quoted
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':
quoted
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:
quoted
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 [off-list ref]
:::::: CC: Linus Torvalds [off-list ref]

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help