// SPDX-License-Identifier: GPL-2.0-only/* * Copyright (c) 2013, Sony Mobile Communications AB. * Copyright (c) 2013, The Linux Foundation. All rights reserved. */#include<linux/delay.h>#include<linux/err.h>#include<linux/io.h>#include<linux/module.h>#include<linux/of.h>#include<linux/platform_device.h>#include<linux/pinctrl/machine.h>#include<linux/pinctrl/pinctrl.h>#include<linux/pinctrl/pinmux.h>#include<linux/pinctrl/pinconf.h>#include<linux/pinctrl/pinconf-generic.h>#include<linux/slab.h>#include<linux/gpio/driver.h>#include<linux/interrupt.h>#include<linux/spinlock.h>#include<linux/reboot.h>#include<linux/pm.h>#include<linux/log2.h>#include<linux/qcom_scm.h>#include<linux/soc/qcom/irq.h>#include"../core.h"#include"../pinconf.h"#include"pinctrl-msm.h"#include"../pinctrl-utils.h"#define MAX_NR_GPIO 300#define MAX_NR_TILES 4#define PS_HOLD_OFFSET 0x820/** * struct msm_pinctrl - state for a pinctrl-msm device * @dev: device handle. * @pctrl: pinctrl handle. * @chip: gpiochip handle. * @desc: pin controller descriptor * @restart_nb: restart notifier block. * @irq_chip: irq chip information * @irq: parent irq for the TLMM irq_chip. * @intr_target_use_scm: route irq to application cpu using scm calls * @lock: Spinlock to protect register resources as well * as msm_pinctrl data structures. * @enabled_irqs: Bitmap of currently enabled irqs. * @dual_edge_irqs: Bitmap of irqs that need sw emulated dual edge * detection. * @skip_wake_irqs: Skip IRQs that are handled by wakeup interrupt controller * @disabled_for_mux: These IRQs were disabled because we muxed away. * @soc: Reference to soc_data of platform specific data. * @regs: Base addresses for the TLMM tiles. * @phys_base: Physical base address */structmsm_pinctrl{structdevice*dev;structpinctrl_dev*pctrl;structgpio_chipchip;structpinctrl_descdesc;structnotifier_blockrestart_nb