2023-02-16 21:36:08 +03:00
// 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 " ,
2023-11-13 16:15:59 +03:00
. pm = pm_sleep_ptr ( & tng_gpio_pm_ops ) ,
2023-02-16 21:36:08 +03:00
} ,
. 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 ) ;