| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Intel Elkhart Lake PSE GPIO driver |
| * |
| * Copyright (c) 2023 Intel Corporation. |
| * |
| * Authors: Pandith N <pandith.n@intel.com> |
| * Raag Jadav <raag.jadav@intel.com> |
| */ |
| |
| #include <linux/device.h> |
| #include <linux/err.h> |
| #include <linux/module.h> |
| #include <linux/platform_device.h> |
| #include <linux/pm.h> |
| |
| #include "gpio-tangier.h" |
| |
| /* Each Intel EHL PSE GPIO Controller has 30 GPIO pins */ |
| #define EHL_PSE_NGPIO 30 |
| |
| static int ehl_gpio_probe(struct platform_device *pdev) |
| { |
| struct device *dev = &pdev->dev; |
| struct tng_gpio *priv; |
| int irq, ret; |
| |
| irq = platform_get_irq(pdev, 0); |
| if (irq < 0) |
| return irq; |
| |
| priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); |
| if (!priv) |
| return -ENOMEM; |
| |
| priv->reg_base = devm_platform_ioremap_resource(pdev, 0); |
| if (IS_ERR(priv->reg_base)) |
| return PTR_ERR(priv->reg_base); |
| |
| priv->dev = dev; |
| priv->irq = irq; |
| |
| priv->info.base = -1; |
| priv->info.ngpio = EHL_PSE_NGPIO; |
| |
| priv->wake_regs.gwmr = GWMR_EHL; |
| priv->wake_regs.gwsr = GWSR_EHL; |
| priv->wake_regs.gsir = GSIR_EHL; |
| |
| ret = devm_tng_gpio_probe(dev, priv); |
| if (ret) |
| return dev_err_probe(dev, ret, "tng_gpio_probe error\n"); |
| |
| platform_set_drvdata(pdev, priv); |
| return 0; |
| } |
| |
| static const struct platform_device_id ehl_gpio_ids[] = { |
| { "gpio-elkhartlake" }, |
| { } |
| }; |
| MODULE_DEVICE_TABLE(platform, ehl_gpio_ids); |
| |
| static struct platform_driver ehl_gpio_driver = { |
| .driver = { |
| .name = "gpio-elkhartlake", |
| .pm = pm_sleep_ptr(&tng_gpio_pm_ops), |
| }, |
| .probe = ehl_gpio_probe, |
| .id_table = ehl_gpio_ids, |
| }; |
| module_platform_driver(ehl_gpio_driver); |
| |
| MODULE_AUTHOR("Pandith N <pandith.n@intel.com>"); |
| MODULE_AUTHOR("Raag Jadav <raag.jadav@intel.com>"); |
| MODULE_DESCRIPTION("Intel Elkhart Lake PSE GPIO driver"); |
| MODULE_LICENSE("GPL"); |
| MODULE_IMPORT_NS(GPIO_TANGIER); |