1. 19 10月, 2017 1 次提交
    • L
      pinctrl: adi2: Fix Kconfig build problem · 1c363531
      Linus Walleij 提交于
      The build robot is complaining on Blackfin:
      
      drivers/pinctrl/pinctrl-adi2.c: In function 'port_setup':
      >> drivers/pinctrl/pinctrl-adi2.c:221:21: error: dereferencing
         pointer to incomplete type 'struct gpio_port_t'
            writew(readw(&regs->port_fer) & ~BIT(offset),
                              ^~
      drivers/pinctrl/pinctrl-adi2.c: In function 'adi_gpio_ack_irq':
      >> drivers/pinctrl/pinctrl-adi2.c:266:18: error: dereferencing
      pointer to incomplete type 'struct bfin_pint_regs'
            if (readl(&regs->invert_set) & pintbit)
                           ^~
      It seems the driver need to include <asm/gpio.h> and <asm/irq.h>
      to compile.
      
      The Blackfin architecture was re-defining the Kconfig
      PINCTRL symbol which is not OK, so replaced this with
      PINCTRL_BLACKFIN_ADI2 which selects PINCTRL and PINCTRL_ADI2
      just like most arches do.
      
      Further, the old GPIO driver symbol GPIO_ADI was possible to
      select at the same time as selecting PINCTRL. This was not
      working because the arch-local <asm/gpio.h> header contains
      an explicit #ifndef PINCTRL clause making compilation break
      if you combine them. The same is true for DEBUG_MMRS.
      
      Make sure the ADI2 pinctrl driver is not selected at the same
      time as the old GPIO implementation. (This should be converted
      to use gpiolib or pincontrol and move to drivers/...) Also make
      sure the old GPIO_ADI driver or DEBUG_MMRS is not selected at
      the same time as the new PINCTRL implementation, and only make
      PINCTRL_ADI2 selectable for the Blackfin families that actually
      have it.
      
      This way it is still possible to add e.g. I2C-based pin
      control expanders on the Blackfin.
      
      Cc: Steven Miao <realmz6@gmail.com>
      Cc: Huanhuan Feng <huanhuan.feng@analog.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      1c363531
  2. 17 10月, 2017 2 次提交
  3. 15 10月, 2017 1 次提交
  4. 12 10月, 2017 1 次提交
  5. 11 10月, 2017 5 次提交
  6. 10 10月, 2017 2 次提交
  7. 07 10月, 2017 4 次提交
  8. 06 10月, 2017 4 次提交
  9. 02 10月, 2017 2 次提交
  10. 27 9月, 2017 1 次提交
  11. 22 9月, 2017 1 次提交
  12. 21 9月, 2017 3 次提交
  13. 19 9月, 2017 5 次提交
  14. 12 9月, 2017 8 次提交
    • D
      pinctrl/amd: save pin registers over suspend/resume · 79d2c8be
      Daniel Drake 提交于
      The touchpad in the Asus laptop models X505BA/BP and X542BA/BP is
      unresponsive after suspend/resume. The following error appears during
      resume:
      
        i2c_hid i2c-ELAN1300:00: failed to reset device.
      
      The problem here is that i2c_hid does not notice the interrupt being
      generated at this point, because the GPIO is no longer configured
      for interrupts.
      
      Fix this by saving pinctrl-amd pin registers during suspend and
      restoring them at resume time.
      
      Based on code from pinctrl-intel.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NDaniel Drake <drake@endlessm.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      79d2c8be
    • G
      pinctrl: armada-37xx: Fix gpio interrupt setup · a9a1a483
      Gregory CLEMENT 提交于
      Since commit dc749a09 ("gpiolib: allow gpio irqchip to map irqs
      dynamically"), the irqs for gpio are not statically allocated during in
      gpiochip_irqchip_add.
      
      This driver was based on this assumption for initializing the mask
      associated to each interrupt this led to a NULL pointer crash in the
      kernel:
      
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      Mem abort info:
        Exception class = DABT (current EL), IL = 32 bits
        SET = 0, FnV = 0
        EA = 0, S1PTW = 0
      Data abort info:
        ISV = 0, ISS = 0x00000068
        CM = 0, WnR = 1
      [0000000000000000] user address but active_mm is swapper
      Internal error: Oops: 96000044 [#1] PREEMPT SMP
      Modules linked in:
      CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.13.0-06657-g3b9f8ed2 #576
      Hardware name: Marvell Armada 3720 Development Board DB-88F3720-DDR3 (DT)
      task: ffff80001d908000 task.stack: ffff000008068000
      PC is at armada_37xx_pinctrl_probe+0x5f8/0x670
      LR is at armada_37xx_pinctrl_probe+0x5e8/0x670
      pc : [<ffff000008e25cdc>] lr : [<ffff000008e25ccc>] pstate: 60000045
      sp : ffff00000806bb80
      x29: ffff00000806bb80 x28: 0000000000000024
      x27: 000000000000000c x26: 0000000000000001
      x25: ffff80001efee760 x24: 0000000000000000
      x23: ffff80001db6f570 x22: ffff80001db6f438
      x21: 0000000000000000 x20: ffff80001d9f4810
      x19: ffff80001db6f418 x18: 0000000000000000
      x17: 0000000000000001 x16: 0000000000000019
      x15: ffffffffffffffff x14: 0140000000000000
      x13: 0000000000000000 x12: 0000000000000030
      x11: 0101010101010101 x10: 0000000000000040
      x9 : ffff000009923580 x8 : ffff80001d400248
      x7 : ffff80001d400270 x6 : 0000000000000000
      x5 : ffff80001d400248 x4 : ffff80001d400270
      x3 : 0000000000000000 x2 : 0000000000000001
      x1 : 0000000000000001 x0 : 0000000000000000
      Process swapper/0 (pid: 1, stack limit = 0xffff000008068000)
      Call trace:
      Exception stack(0xffff00000806ba40 to 0xffff00000806bb80)
      ba40: 0000000000000000 0000000000000001 0000000000000001 0000000000000000
      ba60: ffff80001d400270 ffff80001d400248 0000000000000000 ffff80001d400270
      ba80: ffff80001d400248 ffff000009923580 0000000000000040 0101010101010101
      baa0: 0000000000000030 0000000000000000 0140000000000000 ffffffffffffffff
      bac0: 0000000000000019 0000000000000001 0000000000000000 ffff80001db6f418
      bae0: ffff80001d9f4810 0000000000000000 ffff80001db6f438 ffff80001db6f570
      bb00: 0000000000000000 ffff80001efee760 0000000000000001 000000000000000c
      bb20: 0000000000000024 ffff00000806bb80 ffff000008e25ccc ffff00000806bb80
      bb40: ffff000008e25cdc 0000000060000045 ffff00000806bb60 ffff0000081189b8
      bb60: ffffffffffffffff ffff00000811cf1c ffff00000806bb80 ffff000008e25cdc
      [<ffff000008e25cdc>] armada_37xx_pinctrl_probe+0x5f8/0x670
      [<ffff00000859d8c8>] platform_drv_probe+0x58/0xb8
      [<ffff00000859bb44>] driver_probe_device+0x22c/0x2d8
      [<ffff00000859bcac>] __driver_attach+0xbc/0xc0
      [<ffff000008599c84>] bus_for_each_dev+0x4c/0x98
      [<ffff00000859b440>] driver_attach+0x20/0x28
      [<ffff00000859af90>] bus_add_driver+0x1b8/0x228
      [<ffff00000859c648>] driver_register+0x60/0xf8
      [<ffff00000859df64>] __platform_driver_probe+0x74/0x130
      [<ffff000008e256dc>] armada_37xx_pinctrl_driver_init+0x20/0x28
      [<ffff000008083980>] do_one_initcall+0x38/0x128
      [<ffff000008e00cf4>] kernel_init_freeable+0x188/0x22c
      [<ffff0000089b56e8>] kernel_init+0x10/0x100
      [<ffff000008084bb0>] ret_from_fork+0x10/0x18
      Code: f9403fa2 12001341 1100075a 9ac12041 (b9000001)
      ---[ end trace 8b0f4e05e1603208 ]---
      
      This patch moves the initialization of the mask field in the irq_startup
      function. However some callbacks such as irq_set_type and irq_set_wake
      could be called before irq_startup. For those functions the mask is
      computed at each call which is not a issue as these functions are not
      located in a hot path but are used sporadically for configuration.
      
      Fixes: dc749a09 ("gpiolib: allow gpio irqchip to map irqs
      dynamically")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NGregory CLEMENT <gregory.clement@free-electrons.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      a9a1a483
    • D
      pinctrl: sprd: fix off by one bugs · 4ce504c4
      Dan Carpenter 提交于
      info->groups[] has info->ngroups elements so these comparisons should be
      >= instead of >.
      
      Fixes: 41d32cfc ("pinctrl: sprd: Add Spreadtrum pin control driver")
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Reviewed-by: NBaolin Wang <baolin.wang@spreadtrum.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      4ce504c4
    • D
      pinctrl: sprd: check for allocation failure · 41470c37
      Dan Carpenter 提交于
      devm_pinctrl_get() could fail with ERR_PTR(-ENOMEM) so I have added a
      check for that.  I also reversed the other IS_ERR() test because it was
      a little confusing to test one way and then the opposite a couple lines
      later.
      
      Fixes: 41d32cfc ("pinctrl: sprd: Add Spreadtrum pin control driver")
      Signed-off-by: NDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      41470c37
    • G
      pinctrl: sprd: Restrict PINCTRL_SPRD to ARCH_SPRD or COMPILE_TEST · baec7e68
      Geert Uytterhoeven 提交于
      The Spreadtrum pinctrl drivers are only useful when building for a
      Spreadtrum platform.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      baec7e68
    • R
      pinctrl: sprd: fix build errors and dependencies · aaab90bb
      Randy Dunlap 提交于
      Fix build errors when CONFIG_OF is not enabled.
      Also, the pinctrl-sprd-sc9860 driver uses functions from the pinctrl-sprd
      driver, so the former should depend on the latter driver.
      
      ../drivers/pinctrl/sprd/pinctrl-sprd.c: In function 'sprd_dt_node_to_map':
      ../drivers/pinctrl/sprd/pinctrl-sprd.c:290:2: error: implicit declaration of function 'pinconf_generic_parse_dt_config' [-Werror=implicit-function-declaration]
        ret = pinconf_generic_parse_dt_config(np, pctldev, &configs,
        ^
      ../drivers/pinctrl/sprd/pinctrl-sprd.c: At top level:
      ../drivers/pinctrl/sprd/pinctrl-sprd.c:844:44: error: array type has incomplete element type
       static const struct pinconf_generic_params sprd_dt_params[] = {
                                                  ^
      Signed-off-by: NRandy Dunlap <rdunlap@infradead.org>
      Cc: Baolin Wang <baolin.wang@spreadtrum.com>
      Cc: Linus Walleij <linus.walleij@linaro.org>
      Cc: linux-gpio@vger.kernel.org
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      aaab90bb
    • C
      pinctrl: sprd: make three local functions static · 045b5792
      Colin Ian King 提交于
      The functions sprd_pmx_get_function_count, sprd_pmx_get_function_name
      and sprd_pmx_get_function_groups are local to the source and do not
      need to be in global scope, so make them static.
      
      Cleans up sparse warnings:
      "symbol 'sprd_pmx_get_function_count' was not declared. Should it be
      static?"
      "symbol 'sprd_pmx_get_function_name' was not declared. Should it be
      static?"
      "symbol 'sprd_pmx_get_function_groups' was not declared. Should it be
      static?"
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      045b5792
    • M
      pinctrl: uniphier: include <linux/build_bug.h> instead of <linux/bug.h> · 6d363bd1
      Masahiro Yamada 提交于
      The #includes <linux/bug.h> is here to use BUILD_BUG_ON_ZERO().
      
      Thanks to commit bc6245e5 ("bug: split BUILD_BUG stuff out into
      <linux/build_bug.h>"), it is now possible to reduce the number of
      headers pulled in.
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
      6d363bd1