tree: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git devel head: 05e51a4da2af5f68c911adcb888f103460a2e5b3 commit: e40fde2c098df8bbaf82b5b80b43aa49eb2cb9af [43/47] pinctrl: samsung: Add the support the multiple IORESOURCE_MEM for one pin-bank config: arm-allmodconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 6.1.1-9) 6.1.1 20160705 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout e40fde2c098df8bbaf82b5b80b43aa49eb2cb9af # save the attached .config to linux build tree make.cross ARCH=arm All error/warnings (new ones prefixed by >>): drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_irq_set_function': >> drivers/pinctrl/samsung/pinctrl-s3c64xx.c:283:9: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? reg = d->virt_base + bank->pctl_offset; ^~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_gpio_irq_set_mask': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:313:23: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? void __iomem *reg = d->virt_base + EINTMASK_REG(bank->eint_offset); ^~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_gpio_irq_ack': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:339:23: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? void __iomem *reg = d->virt_base + EINTPEND_REG(bank->eint_offset); ^~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_gpio_irq_set_type': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:362:9: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? reg = d->virt_base + EINTCON_REG(bank->eint_offset); ^~ In file included from include/linux/swab.h:4:0, from include/uapi/linux/byteorder/big_endian.h:12, from include/linux/byteorder/big_endian.h:4, from arch/arm/include/uapi/asm/byteorder.h:19, from include/asm-generic/bitops/le.h:5, from arch/arm/include/asm/bitops.h:340, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/linux/list.h:8, from include/linux/module.h:9, from drivers/pinctrl/samsung/pinctrl-s3c64xx.c:18: drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint_gpio_irq': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:424:22: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? svc = readl(drvdata->virt_base + SERVICE_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ >> drivers/pinctrl/samsung/pinctrl-s3c64xx.c:424:9: note: in expansion of macro 'readl' svc = readl(drvdata->virt_base + SERVICE_REG); ^~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint0_irq_set_mask': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:524:15: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? val = readl(d->virt_base + EINT0MASK_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c:524:8: note: in expansion of macro 'readl' val = readl(d->virt_base + EINT0MASK_REG); ^~~~~ In file included from include/linux/io.h:25:0, from include/linux/irq.h:24, from drivers/pinctrl/samsung/pinctrl-s3c64xx.c:22: drivers/pinctrl/samsung/pinctrl-s3c64xx.c:529:15: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? writel(val, d->virt_base + EINT0MASK_REG); ^ arch/arm/include/asm/io.h:297:71: note: in definition of macro 'writel_relaxed' #define writel_relaxed(v,c) __raw_writel((__force u32) cpu_to_le32(v),c) ^ >> drivers/pinctrl/samsung/pinctrl-s3c64xx.c:529:2: note: in expansion of macro 'writel' writel(val, d->virt_base + EINT0MASK_REG); ^~~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint0_irq_ack': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:549:7: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? d->virt_base + EINT0PEND_REG); ^ arch/arm/include/asm/io.h:297:71: note: in definition of macro 'writel_relaxed' #define writel_relaxed(v,c) __raw_writel((__force u32) cpu_to_le32(v),c) ^ drivers/pinctrl/samsung/pinctrl-s3c64xx.c:548:2: note: in expansion of macro 'writel' writel(1 << ddata->eints[irqd->hwirq], ^~~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint0_irq_set_type': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:572:9: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? reg = d->virt_base + EINT0CON0_REG; ^~ In file included from include/linux/swab.h:4:0, from include/uapi/linux/byteorder/big_endian.h:12, from include/linux/byteorder/big_endian.h:4, from arch/arm/include/uapi/asm/byteorder.h:19, from include/asm-generic/bitops/le.h:5, from arch/arm/include/asm/bitops.h:340, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/linux/list.h:8, from include/linux/module.h:9, from drivers/pinctrl/samsung/pinctrl-s3c64xx.c:18: drivers/pinctrl/samsung/pinctrl-s3c64xx.c: In function 's3c64xx_irq_demux_eint': drivers/pinctrl/samsung/pinctrl-s3c64xx.c:610:22: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? pend = readl(drvdata->virt_base + EINT0PEND_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c:610:9: note: in expansion of macro 'readl' pend = readl(drvdata->virt_base + EINT0PEND_REG); ^~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c:611:22: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? mask = readl(drvdata->virt_base + EINT0MASK_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl/samsung/pinctrl-s3c64xx.c:611:9: note: in expansion of macro 'readl' mask = readl(drvdata->virt_base + EINT0MASK_REG); ^~~~~ -- drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_irq_set_function': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:283:9: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? reg = d->virt_base + bank->pctl_offset; ^~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_gpio_irq_set_mask': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:313:23: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? void __iomem *reg = d->virt_base + EINTMASK_REG(bank->eint_offset); ^~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_gpio_irq_ack': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:339:23: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? void __iomem *reg = d->virt_base + EINTPEND_REG(bank->eint_offset); ^~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_gpio_irq_set_type': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:362:9: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? reg = d->virt_base + EINTCON_REG(bank->eint_offset); ^~ In file included from include/linux/swab.h:4:0, from include/uapi/linux/byteorder/big_endian.h:12, from include/linux/byteorder/big_endian.h:4, from arch/arm/include/uapi/asm/byteorder.h:19, from include/asm-generic/bitops/le.h:5, from arch/arm/include/asm/bitops.h:340, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/linux/list.h:8, from include/linux/module.h:9, from drivers/pinctrl//samsung/pinctrl-s3c64xx.c:18: drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint_gpio_irq': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:424:22: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? svc = readl(drvdata->virt_base + SERVICE_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:424:9: note: in expansion of macro 'readl' svc = readl(drvdata->virt_base + SERVICE_REG); ^~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint0_irq_set_mask': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:524:15: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? val = readl(d->virt_base + EINT0MASK_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:524:8: note: in expansion of macro 'readl' val = readl(d->virt_base + EINT0MASK_REG); ^~~~~ In file included from include/linux/io.h:25:0, from include/linux/irq.h:24, from drivers/pinctrl//samsung/pinctrl-s3c64xx.c:22: drivers/pinctrl//samsung/pinctrl-s3c64xx.c:529:15: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? writel(val, d->virt_base + EINT0MASK_REG); ^ arch/arm/include/asm/io.h:297:71: note: in definition of macro 'writel_relaxed' #define writel_relaxed(v,c) __raw_writel((__force u32) cpu_to_le32(v),c) ^ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:529:2: note: in expansion of macro 'writel' writel(val, d->virt_base + EINT0MASK_REG); ^~~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint0_irq_ack': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:549:7: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? d->virt_base + EINT0PEND_REG); ^ arch/arm/include/asm/io.h:297:71: note: in definition of macro 'writel_relaxed' #define writel_relaxed(v,c) __raw_writel((__force u32) cpu_to_le32(v),c) ^ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:548:2: note: in expansion of macro 'writel' writel(1 << ddata->eints[irqd->hwirq], ^~~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_eint0_irq_set_type': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:572:9: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? reg = d->virt_base + EINT0CON0_REG; ^~ In file included from include/linux/swab.h:4:0, from include/uapi/linux/byteorder/big_endian.h:12, from include/linux/byteorder/big_endian.h:4, from arch/arm/include/uapi/asm/byteorder.h:19, from include/asm-generic/bitops/le.h:5, from arch/arm/include/asm/bitops.h:340, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/linux/list.h:8, from include/linux/module.h:9, from drivers/pinctrl//samsung/pinctrl-s3c64xx.c:18: drivers/pinctrl//samsung/pinctrl-s3c64xx.c: In function 's3c64xx_irq_demux_eint': drivers/pinctrl//samsung/pinctrl-s3c64xx.c:610:22: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? pend = readl(drvdata->virt_base + EINT0PEND_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:610:9: note: in expansion of macro 'readl' pend = readl(drvdata->virt_base + EINT0PEND_REG); ^~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:611:22: error: 'struct samsung_pinctrl_drv_data' has no member named 'virt_base'; did you mean 'pin_base'? mask = readl(drvdata->virt_base + EINT0MASK_REG); ^ include/uapi/linux/swab.h:113:54: note: in definition of macro '__swab32' #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x)) ^ include/linux/byteorder/generic.h:88:21: note: in expansion of macro '__le32_to_cpu' #define le32_to_cpu __le32_to_cpu ^~~~~~~~~~~~~ >> arch/arm/include/asm/io.h:301:32: note: in expansion of macro 'readl_relaxed' #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) ^~~~~~~~~~~~~ drivers/pinctrl//samsung/pinctrl-s3c64xx.c:611:9: note: in expansion of macro 'readl' mask = readl(drvdata->virt_base + EINT0MASK_REG); ^~~~~ vim +283 drivers/pinctrl/samsung/pinctrl-s3c64xx.c 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 277 void __iomem *reg; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 278 u8 shift; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 279 u32 mask; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 280 u32 val; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 281 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 282 /* Make sure that pin is configured as interrupt */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 @283 reg = d->virt_base + bank->pctl_offset; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 284 shift = pin; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 285 if (bank_type->fld_width[PINCFG_TYPE_FUNC] * shift >= 32) { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 286 /* 4-bit bank type with 2 con regs */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 287 reg += 4; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 288 shift -= 8; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 289 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 290 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 291 shift = shift * bank_type->fld_width[PINCFG_TYPE_FUNC]; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 292 mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 293 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 294 spin_lock_irqsave(&bank->slock, flags); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 295 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 296 val = readl(reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 297 val &= ~(mask << shift); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 298 val |= bank->eint_func << shift; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 299 writel(val, reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 300 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 301 spin_unlock_irqrestore(&bank->slock, flags); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 302 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 303 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 304 /* 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 305 * Functions for EINT GPIO configuration (EINT groups 1-9) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 306 */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 307 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 308 static inline void s3c64xx_gpio_irq_set_mask(struct irq_data *irqd, bool mask) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 309 { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 310 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 311 struct samsung_pinctrl_drv_data *d = bank->drvdata; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 312 unsigned char index = EINT_OFFS(bank->eint_offset) + irqd->hwirq; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 313 void __iomem *reg = d->virt_base + EINTMASK_REG(bank->eint_offset); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 314 u32 val; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 315 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 316 val = readl(reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 317 if (mask) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 318 val |= 1 << index; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 319 else 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 320 val &= ~(1 << index); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 321 writel(val, reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 322 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 323 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 324 static void s3c64xx_gpio_irq_unmask(struct irq_data *irqd) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 325 { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 326 s3c64xx_gpio_irq_set_mask(irqd, false); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 327 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 328 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 329 static void s3c64xx_gpio_irq_mask(struct irq_data *irqd) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 330 { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 331 s3c64xx_gpio_irq_set_mask(irqd, true); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 332 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 333 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 334 static void s3c64xx_gpio_irq_ack(struct irq_data *irqd) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 335 { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 336 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 337 struct samsung_pinctrl_drv_data *d = bank->drvdata; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 338 unsigned char index = EINT_OFFS(bank->eint_offset) + irqd->hwirq; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 339 void __iomem *reg = d->virt_base + EINTPEND_REG(bank->eint_offset); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 340 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 341 writel(1 << index, reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 342 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 343 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 344 static int s3c64xx_gpio_irq_set_type(struct irq_data *irqd, unsigned int type) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 345 { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 346 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 347 struct samsung_pinctrl_drv_data *d = bank->drvdata; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 348 void __iomem *reg; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 349 int trigger; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 350 u8 shift; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 351 u32 val; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 352 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 353 trigger = s3c64xx_irq_get_trigger(type); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 354 if (trigger < 0) { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 355 pr_err("unsupported external interrupt type\n"); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 356 return -EINVAL; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 357 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 358 f66eb498 drivers/pinctrl/samsung/pinctrl-s3c64xx.c Thomas Gleixner 2015-06-23 359 s3c64xx_irq_set_handler(irqd, type); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 360 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 361 /* Set up interrupt trigger */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 362 reg = d->virt_base + EINTCON_REG(bank->eint_offset); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 363 shift = EINT_OFFS(bank->eint_offset) + irqd->hwirq; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 364 shift = 4 * (shift / 4); /* 4 EINTs per trigger selector */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 365 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 366 val = readl(reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 367 val &= ~(EINT_CON_MASK << shift); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 368 val |= trigger << shift; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 369 writel(val, reg); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 370 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 371 s3c64xx_irq_set_function(d, bank, irqd->hwirq); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 372 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 373 return 0; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 374 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 375 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 376 /* 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 377 * irq_chip for gpio interrupts. 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 378 */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 379 static struct irq_chip s3c64xx_gpio_irq_chip = { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 380 .name = "GPIO", 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 381 .irq_unmask = s3c64xx_gpio_irq_unmask, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 382 .irq_mask = s3c64xx_gpio_irq_mask, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 383 .irq_ack = s3c64xx_gpio_irq_ack, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 384 .irq_set_type = s3c64xx_gpio_irq_set_type, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 385 }; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 386 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 387 static int s3c64xx_gpio_irq_map(struct irq_domain *h, unsigned int virq, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 388 irq_hw_number_t hw) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 389 { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 390 struct samsung_pin_bank *bank = h->host_data; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 391 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 392 if (!(bank->eint_mask & (1 << hw))) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 393 return -EINVAL; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 394 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 395 irq_set_chip_and_handler(virq, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 396 &s3c64xx_gpio_irq_chip, handle_level_irq); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 397 irq_set_chip_data(virq, bank); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 398 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 399 return 0; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 400 } 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 401 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 402 /* 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 403 * irq domain callbacks for external gpio interrupt controller. 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 404 */ 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 405 static const struct irq_domain_ops s3c64xx_gpio_irqd_ops = { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 406 .map = s3c64xx_gpio_irq_map, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 407 .xlate = irq_domain_xlate_twocell, 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 408 }; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 409 bd0b9ac4 drivers/pinctrl/samsung/pinctrl-s3c64xx.c Thomas Gleixner 2015-09-14 410 static void s3c64xx_eint_gpio_irq(struct irq_desc *desc) 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 411 { 5663bb27 drivers/pinctrl/samsung/pinctrl-s3c64xx.c Jiang Liu 2015-06-04 412 struct irq_chip *chip = irq_desc_get_chip(desc); 5663bb27 drivers/pinctrl/samsung/pinctrl-s3c64xx.c Jiang Liu 2015-06-04 413 struct s3c64xx_eint_gpio_data *data = irq_desc_get_handler_data(desc); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 414 struct samsung_pinctrl_drv_data *drvdata = data->drvdata; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 415 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 416 chained_irq_enter(chip, desc); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 417 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 418 do { 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 419 unsigned int svc; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 420 unsigned int group; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 421 unsigned int pin; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 422 unsigned int virq; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 423 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 @424 svc = readl(drvdata->virt_base + SERVICE_REG); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 425 group = SVC_GROUP(svc); 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 426 pin = svc & SVC_NUM_MASK; 61dd7261 drivers/pinctrl/pinctrl-s3c64xx.c Tomasz Figa 2013-03-18 427 :::::: The code at line 283 was first introduced by commit :::::: 61dd726131777017348b70bd8576b42994a8ffa2 pinctrl: Add pinctrl-s3c64xx driver :::::: TO: Tomasz Figa <tomasz.figa@xxxxxxxxx> :::::: CC: Linus Walleij <linus.walleij@xxxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip