Loading drivers/pinctrl/qcom/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -168,7 +168,7 @@ config PINCTRL_SDM660 config PINCTRL_SDM845 tristate "Qualcomm Technologies Inc SDM845 pin controller driver" depends on GPIOLIB && OF depends on GPIOLIB && (OF || ACPI) select PINCTRL_MSM help This is the pinctrl, pinmux, pinconf and gpiolib driver for the Loading drivers/pinctrl/qcom/pinctrl-msm.c +18 −0 Original line number Diff line number Diff line Loading @@ -607,8 +607,23 @@ static int msm_gpio_init_valid_mask(struct gpio_chip *chip) int ret; unsigned int len, i; unsigned int max_gpios = pctrl->soc->ngpios; const int *reserved = pctrl->soc->reserved_gpios; u16 *tmp; /* Driver provided reserved list overrides DT and ACPI */ if (reserved) { bitmap_fill(chip->valid_mask, max_gpios); for (i = 0; reserved[i] >= 0; i++) { if (i >= max_gpios || reserved[i] >= max_gpios) { dev_err(pctrl->dev, "invalid list of reserved GPIOs\n"); return -EINVAL; } clear_bit(reserved[i], chip->valid_mask); } return 0; } /* The number of GPIOs in the ACPI tables */ len = ret = device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0); Loading Loading @@ -964,6 +979,9 @@ static void msm_gpio_irq_handler(struct irq_desc *desc) static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl) { if (pctrl->soc->reserved_gpios) return true; return device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0) > 0; } Loading drivers/pinctrl/qcom/pinctrl-msm.h +1 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,7 @@ struct msm_pinctrl_soc_data { bool pull_no_keeper; const char *const *tiles; unsigned int ntiles; const int *reserved_gpios; }; extern const struct dev_pm_ops msm_pinctrl_dev_pm_ops; Loading drivers/pinctrl/qcom/pinctrl-sdm845.c +35 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. */ #include <linux/acpi.h> #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> Loading Loading @@ -1277,6 +1278,10 @@ static const struct msm_pingroup sdm845_groups[] = { SDC_QDSD_PINGROUP(sdc2_data, 0x99a000, 9, 0), }; static const int sdm845_acpi_reserved_gpios[] = { 0, 1, 2, 3, 81, 82, 83, 84, -1 }; static const struct msm_pinctrl_soc_data sdm845_pinctrl = { .pins = sdm845_pins, .npins = ARRAY_SIZE(sdm845_pins), Loading @@ -1287,11 +1292,39 @@ static const struct msm_pinctrl_soc_data sdm845_pinctrl = { .ngpios = 151, }; static const struct msm_pinctrl_soc_data sdm845_acpi_pinctrl = { .pins = sdm845_pins, .npins = ARRAY_SIZE(sdm845_pins), .groups = sdm845_groups, .ngroups = ARRAY_SIZE(sdm845_groups), .reserved_gpios = sdm845_acpi_reserved_gpios, .ngpios = 150, }; static int sdm845_pinctrl_probe(struct platform_device *pdev) { return msm_pinctrl_probe(pdev, &sdm845_pinctrl); int ret; if (pdev->dev.of_node) { ret = msm_pinctrl_probe(pdev, &sdm845_pinctrl); } else if (has_acpi_companion(&pdev->dev)) { ret = msm_pinctrl_probe(pdev, &sdm845_acpi_pinctrl); } else { dev_err(&pdev->dev, "DT and ACPI disabled\n"); return -EINVAL; } return ret; } #if CONFIG_ACPI static const struct acpi_device_id sdm845_pinctrl_acpi_match[] = { { "QCOM0217"}, { }, }; MODULE_DEVICE_TABLE(acpi, sdm845_pinctrl_acpi_match); #endif static const struct of_device_id sdm845_pinctrl_of_match[] = { { .compatible = "qcom,sdm845-pinctrl", }, { }, Loading @@ -1302,6 +1335,7 @@ static struct platform_driver sdm845_pinctrl_driver = { .name = "sdm845-pinctrl", .pm = &msm_pinctrl_dev_pm_ops, .of_match_table = sdm845_pinctrl_of_match, .acpi_match_table = ACPI_PTR(sdm845_pinctrl_acpi_match), }, .probe = sdm845_pinctrl_probe, .remove = msm_pinctrl_remove, Loading Loading
drivers/pinctrl/qcom/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -168,7 +168,7 @@ config PINCTRL_SDM660 config PINCTRL_SDM845 tristate "Qualcomm Technologies Inc SDM845 pin controller driver" depends on GPIOLIB && OF depends on GPIOLIB && (OF || ACPI) select PINCTRL_MSM help This is the pinctrl, pinmux, pinconf and gpiolib driver for the Loading
drivers/pinctrl/qcom/pinctrl-msm.c +18 −0 Original line number Diff line number Diff line Loading @@ -607,8 +607,23 @@ static int msm_gpio_init_valid_mask(struct gpio_chip *chip) int ret; unsigned int len, i; unsigned int max_gpios = pctrl->soc->ngpios; const int *reserved = pctrl->soc->reserved_gpios; u16 *tmp; /* Driver provided reserved list overrides DT and ACPI */ if (reserved) { bitmap_fill(chip->valid_mask, max_gpios); for (i = 0; reserved[i] >= 0; i++) { if (i >= max_gpios || reserved[i] >= max_gpios) { dev_err(pctrl->dev, "invalid list of reserved GPIOs\n"); return -EINVAL; } clear_bit(reserved[i], chip->valid_mask); } return 0; } /* The number of GPIOs in the ACPI tables */ len = ret = device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0); Loading Loading @@ -964,6 +979,9 @@ static void msm_gpio_irq_handler(struct irq_desc *desc) static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl) { if (pctrl->soc->reserved_gpios) return true; return device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0) > 0; } Loading
drivers/pinctrl/qcom/pinctrl-msm.h +1 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,7 @@ struct msm_pinctrl_soc_data { bool pull_no_keeper; const char *const *tiles; unsigned int ntiles; const int *reserved_gpios; }; extern const struct dev_pm_ops msm_pinctrl_dev_pm_ops; Loading
drivers/pinctrl/qcom/pinctrl-sdm845.c +35 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. */ #include <linux/acpi.h> #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> Loading Loading @@ -1277,6 +1278,10 @@ static const struct msm_pingroup sdm845_groups[] = { SDC_QDSD_PINGROUP(sdc2_data, 0x99a000, 9, 0), }; static const int sdm845_acpi_reserved_gpios[] = { 0, 1, 2, 3, 81, 82, 83, 84, -1 }; static const struct msm_pinctrl_soc_data sdm845_pinctrl = { .pins = sdm845_pins, .npins = ARRAY_SIZE(sdm845_pins), Loading @@ -1287,11 +1292,39 @@ static const struct msm_pinctrl_soc_data sdm845_pinctrl = { .ngpios = 151, }; static const struct msm_pinctrl_soc_data sdm845_acpi_pinctrl = { .pins = sdm845_pins, .npins = ARRAY_SIZE(sdm845_pins), .groups = sdm845_groups, .ngroups = ARRAY_SIZE(sdm845_groups), .reserved_gpios = sdm845_acpi_reserved_gpios, .ngpios = 150, }; static int sdm845_pinctrl_probe(struct platform_device *pdev) { return msm_pinctrl_probe(pdev, &sdm845_pinctrl); int ret; if (pdev->dev.of_node) { ret = msm_pinctrl_probe(pdev, &sdm845_pinctrl); } else if (has_acpi_companion(&pdev->dev)) { ret = msm_pinctrl_probe(pdev, &sdm845_acpi_pinctrl); } else { dev_err(&pdev->dev, "DT and ACPI disabled\n"); return -EINVAL; } return ret; } #if CONFIG_ACPI static const struct acpi_device_id sdm845_pinctrl_acpi_match[] = { { "QCOM0217"}, { }, }; MODULE_DEVICE_TABLE(acpi, sdm845_pinctrl_acpi_match); #endif static const struct of_device_id sdm845_pinctrl_of_match[] = { { .compatible = "qcom,sdm845-pinctrl", }, { }, Loading @@ -1302,6 +1335,7 @@ static struct platform_driver sdm845_pinctrl_driver = { .name = "sdm845-pinctrl", .pm = &msm_pinctrl_dev_pm_ops, .of_match_table = sdm845_pinctrl_of_match, .acpi_match_table = ACPI_PTR(sdm845_pinctrl_acpi_match), }, .probe = sdm845_pinctrl_probe, .remove = msm_pinctrl_remove, Loading