gpio: altera_pio: fix get_value
[oweals/u-boot.git] / drivers / gpio / pm8916_gpio.c
index e38cee88693bf3509994f0361c36ea37917f0d59..bbe214d5eea972c71596794ffba62d2fdb3e1602 100644 (file)
@@ -1,9 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Qualcomm pm8916 pmic gpio driver - part of Qualcomm PM8916 PMIC
  *
  * (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -14,8 +13,6 @@
 #include <asm/gpio.h>
 #include <linux/bitops.h>
 
-DECLARE_GLOBAL_DATA_PTR;
-
 /* Register offset for each gpio */
 #define REG_OFFSET(x)          ((x) * 0x100)
 
@@ -29,7 +26,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define REG_STATUS_VAL_MASK    0x1
 
 /* MODE_CTL */
-#define REG_CTL           0x40
+#define REG_CTL                0x40
 #define REG_CTL_MODE_MASK       0x70
 #define REG_CTL_MODE_INPUT      0x00
 #define REG_CTL_MODE_INOUT      0x20
@@ -173,7 +170,7 @@ static int pm8916_gpio_probe(struct udevice *dev)
        struct pm8916_gpio_bank *priv = dev_get_priv(dev);
        int reg;
 
-       priv->pid = dev_get_addr(dev);
+       priv->pid = dev_read_addr(dev);
        if (priv->pid == FDT_ADDR_T_NONE)
                return -EINVAL;
 
@@ -183,7 +180,7 @@ static int pm8916_gpio_probe(struct udevice *dev)
                return -ENODEV;
 
        reg = pmic_reg_read(dev->parent, priv->pid + REG_SUBTYPE);
-       if (reg != 0x5)
+       if (reg != 0x5 && reg != 0x1)
                return -ENODEV;
 
        return 0;
@@ -193,10 +190,8 @@ static int pm8916_gpio_ofdata_to_platdata(struct udevice *dev)
 {
        struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
-       uc_priv->gpio_count = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev),
-                                            "gpio-count", 0);
-       uc_priv->bank_name = fdt_getprop(gd->fdt_blob, dev_of_offset(dev),
-                                        "gpio-bank-name", NULL);
+       uc_priv->gpio_count = dev_read_u32_default(dev, "gpio-count", 0);
+       uc_priv->bank_name = dev_read_string(dev, "gpio-bank-name");
        if (uc_priv->bank_name == NULL)
                uc_priv->bank_name = "pm8916";
 
@@ -205,6 +200,7 @@ static int pm8916_gpio_ofdata_to_platdata(struct udevice *dev)
 
 static const struct udevice_id pm8916_gpio_ids[] = {
        { .compatible = "qcom,pm8916-gpio" },
+       { .compatible = "qcom,pm8994-gpio" },   /* 22 GPIO's */
        { }
 };
 
@@ -259,7 +255,7 @@ static int pm8941_pwrkey_probe(struct udevice *dev)
        struct pm8916_gpio_bank *priv = dev_get_priv(dev);
        int reg;
 
-       priv->pid = dev_get_addr(dev);
+       priv->pid = devfdt_get_addr(dev);
        if (priv->pid == FDT_ADDR_T_NONE)
                return -EINVAL;
 
@@ -280,6 +276,7 @@ static int pm8941_pwrkey_ofdata_to_platdata(struct udevice *dev)
        struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        uc_priv->gpio_count = 2;
+       uc_priv->bank_name = dev_read_string(dev, "gpio-bank-name");
        if (uc_priv->bank_name == NULL)
                uc_priv->bank_name = "pm8916_key";
 
@@ -288,6 +285,7 @@ static int pm8941_pwrkey_ofdata_to_platdata(struct udevice *dev)
 
 static const struct udevice_id pm8941_pwrkey_ids[] = {
        { .compatible = "qcom,pm8916-pwrkey" },
+       { .compatible = "qcom,pm8994-pwrkey" },
        { }
 };