Pin control fixes for v7.1:
- Two fixes for the mcp23s08 driver. - Revert an earlier fix to the AMD pin controller that was all wrong. A proper fix is being developed. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEElDRnuGcz/wPCXQWMQRCzN7AZXXMFAmosQ2gACgkQQRCzN7AZ XXMYEA/8Dw4lppKbkEOFzsFeCLa6eTu+xb7+cJU1T8xIEk9WA2Ipy/4C+ZceOp3H jxs8jsNG7K/flFPOoiMbP1w5ApLyH8n94kyhhyk4NzXj33+Dd189Gx47w/gUX5Pz pZICo+Cocfnh/gHsAX5yplf+Ga/k+C+B/Hssw1a+5Zhu37DVMrWK8XvBHNll8J0V SDqcFO1kG/fYPyU2DqNZwhdGIaO6jUA/s1xbQs4hCVUNVtMoDS87fFYGPHRNvPjt vP+WAA2aM52BXXiZytrZO4RmcCR4xEi0uxrBBPNiX0RFoP3g9xoc4q8nS57vRUJA EqLtO7y6nkBZLflzOZYkFU/TVnCKFPkIpwRlgRWzCqznehryg5Ab6+ynS0FEJk6b kEvbO0RrpQMjehBtXOZHirjg2BhGjenSiN0jS26LvLQNH+vP0/C7YT8GrwqDu+qV l3ZxdpL/GnYnyykvxGDxJ4A9xHuRaBNxVAfNguQYZrbspXeX1BtckSiKWkDCfqkj qyLp2ylcU3XmaQEXXZcpO0JtAzpug7EmE/yF5JeHUnlnZ/vgRnlWJCov6a+vN3bf bZcIOydFV+29e6DhlbgcCycu62EJn7TPBfgcPTv1hnNe8pYjRxqG8UmsMprcw2U5 4uwqaVP+/5cI/g6qFEDMdIal1KKImI+AWACUI9lu2D8D5hpDeCk= =h1rZ -----END PGP SIGNATURE----- Merge tag 'pinctrl-v7.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl Pull pin control fixes from Linus Walleij: - Two fixes for the mcp23s08 driver. - Revert an earlier fix to the AMD pin controller that was all wrong. A proper fix is being developed. * tag 'pinctrl-v7.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: Revert "pinctrl-amd: enable IRQ for WACF2200 touchscreen on Lenovo Yoga 7 14AGP11" pinctrl: mcp23s08: Read spi-present-mask as u8 not u32 pinctrl: mcp23s08: Initialize mcp->dev and mcp->addr before regmap init
This commit is contained in:
commit
062871f137
2 changed files with 7 additions and 39 deletions
|
|
@ -26,7 +26,6 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/pinctrl/pinconf.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
#include <linux/string_choices.h>
|
||||
|
|
@ -40,39 +39,6 @@
|
|||
static struct amd_gpio *pinctrl_dev;
|
||||
#endif
|
||||
|
||||
static const struct dmi_system_id amd_gpio_quirk_yoga7_14agp11[] = {
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83TD"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "LNVNB161216"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static void amd_gpio_apply_quirks(struct amd_gpio *gpio_dev)
|
||||
{
|
||||
const unsigned int pin = 157; /* WACF2200 GpioInt per ACPI _CRS */
|
||||
unsigned long flags;
|
||||
u32 reg;
|
||||
|
||||
if (!dmi_check_system(amd_gpio_quirk_yoga7_14agp11))
|
||||
return;
|
||||
if (pin >= gpio_dev->gc.ngpio)
|
||||
return;
|
||||
|
||||
raw_spin_lock_irqsave(&gpio_dev->lock, flags);
|
||||
reg = readl(gpio_dev->base + pin * 4);
|
||||
reg |= BIT(INTERRUPT_ENABLE_OFF) | BIT(INTERRUPT_MASK_OFF);
|
||||
writel(reg, gpio_dev->base + pin * 4);
|
||||
raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
|
||||
|
||||
dev_info(&gpio_dev->pdev->dev,
|
||||
"Enabled IRQ for GPIO %u (Yoga 7 14AGP11 touchscreen)\n",
|
||||
pin);
|
||||
}
|
||||
|
||||
static int amd_gpio_get_direction(struct gpio_chip *gc, unsigned offset)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
@ -1253,7 +1219,6 @@ static int amd_gpio_probe(struct platform_device *pdev)
|
|||
|
||||
/* Disable and mask interrupts */
|
||||
amd_gpio_irq_init(gpio_dev);
|
||||
amd_gpio_apply_quirks(gpio_dev);
|
||||
|
||||
girq = &gpio_dev->gc.irq;
|
||||
gpio_irq_chip_set_chip(girq, &amd_gpio_irqchip);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#include "pinctrl-mcp23s08.h"
|
||||
|
||||
#define MCP_MAX_DEV_PER_CS 8
|
||||
#define MCP23S08_SPI_BASE 0x40
|
||||
|
||||
/*
|
||||
* A given spi_device can represent up to eight mcp23sxx chips
|
||||
|
|
@ -143,13 +144,13 @@ static int mcp23s08_probe(struct spi_device *spi)
|
|||
unsigned int addr;
|
||||
int chips;
|
||||
int ret;
|
||||
u32 v;
|
||||
u8 v;
|
||||
|
||||
info = spi_get_device_match_data(spi);
|
||||
|
||||
ret = device_property_read_u32(dev, "microchip,spi-present-mask", &v);
|
||||
ret = device_property_read_u8(dev, "microchip,spi-present-mask", &v);
|
||||
if (ret) {
|
||||
ret = device_property_read_u32(dev, "mcp,spi-present-mask", &v);
|
||||
ret = device_property_read_u8(dev, "mcp,spi-present-mask", &v);
|
||||
if (ret) {
|
||||
dev_err(dev, "missing spi-present-mask");
|
||||
return ret;
|
||||
|
|
@ -173,6 +174,8 @@ static int mcp23s08_probe(struct spi_device *spi)
|
|||
for_each_set_bit(addr, &spi_present_mask, MCP_MAX_DEV_PER_CS) {
|
||||
data->mcp[addr] = &data->chip[--chips];
|
||||
data->mcp[addr]->irq = spi->irq;
|
||||
data->mcp[addr]->dev = dev;
|
||||
data->mcp[addr]->addr = MCP23S08_SPI_BASE | (addr << 1);
|
||||
|
||||
ret = mcp23s08_spi_regmap_init(data->mcp[addr], dev, addr, info);
|
||||
if (ret)
|
||||
|
|
@ -184,7 +187,7 @@ static int mcp23s08_probe(struct spi_device *spi)
|
|||
if (!data->mcp[addr]->pinctrl_desc.name)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = mcp23s08_probe_one(data->mcp[addr], dev, 0x40 | (addr << 1),
|
||||
ret = mcp23s08_probe_one(data->mcp[addr], dev, MCP23S08_SPI_BASE | (addr << 1),
|
||||
info->type, -1);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue