1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Intel Elkhart Lake PSE GPIO driver 4 * 5 * Copyright (c) 2023 Intel Corporation. 6 * 7 * Authors: Pandith N <pandith.n@intel.com> 8 * Raag Jadav <raag.jadav@intel.com> 9 */ 10 11 #include <linux/device.h> 12 #include <linux/err.h> 13 #include <linux/module.h> 14 #include <linux/platform_device.h> 15 #include <linux/pm.h> 16 17 #include "gpio-tangier.h" 18 19 /* Each Intel EHL PSE GPIO Controller has 30 GPIO pins */ 20 #define EHL_PSE_NGPIO 30 21 22 static int ehl_gpio_probe(struct platform_device *pdev) 23 { 24 struct device *dev = &pdev->dev; 25 struct tng_gpio *priv; 26 int irq, ret; 27 28 irq = platform_get_irq(pdev, 0); 29 if (irq < 0) 30 return irq; 31 32 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); 33 if (!priv) 34 return -ENOMEM; 35 36 priv->reg_base = devm_platform_ioremap_resource(pdev, 0); 37 if (IS_ERR(priv->reg_base)) 38 return PTR_ERR(priv->reg_base); 39 40 priv->dev = dev; 41 priv->irq = irq; 42 43 priv->info.base = -1; 44 priv->info.ngpio = EHL_PSE_NGPIO; 45 46 priv->wake_regs.gwmr = GWMR_EHL; 47 priv->wake_regs.gwsr = GWSR_EHL; 48 priv->wake_regs.gsir = GSIR_EHL; 49 50 ret = devm_tng_gpio_probe(dev, priv); 51 if (ret) 52 return dev_err_probe(dev, ret, "tng_gpio_probe error\n"); 53 54 platform_set_drvdata(pdev, priv); 55 return 0; 56 } 57 58 static int ehl_gpio_suspend(struct device *dev) 59 { 60 return tng_gpio_suspend(dev); 61 } 62 63 static int ehl_gpio_resume(struct device *dev) 64 { 65 return tng_gpio_resume(dev); 66 } 67 68 static DEFINE_SIMPLE_DEV_PM_OPS(ehl_gpio_pm_ops, ehl_gpio_suspend, ehl_gpio_resume); 69 70 static const struct platform_device_id ehl_gpio_ids[] = { 71 { "gpio-elkhartlake" }, 72 { } 73 }; 74 MODULE_DEVICE_TABLE(platform, ehl_gpio_ids); 75 76 static struct platform_driver ehl_gpio_driver = { 77 .driver = { 78 .name = "gpio-elkhartlake", 79 .pm = pm_sleep_ptr(&ehl_gpio_pm_ops), 80 }, 81 .probe = ehl_gpio_probe, 82 .id_table = ehl_gpio_ids, 83 }; 84 module_platform_driver(ehl_gpio_driver); 85 86 MODULE_AUTHOR("Pandith N <pandith.n@intel.com>"); 87 MODULE_AUTHOR("Raag Jadav <raag.jadav@intel.com>"); 88 MODULE_DESCRIPTION("Intel Elkhart Lake PSE GPIO driver"); 89 MODULE_LICENSE("GPL"); 90 MODULE_IMPORT_NS(GPIO_TANGIER); 91