// SPDX-License-Identifier: GPL-2.0//// regmap based irq_chip//// Copyright 2011 Wolfson Microelectronics plc//// Author: Mark Brown <broonie@opensource.wolfsonmicro.com>#include<linux/device.h>#include<linux/export.h>#include<linux/interrupt.h>#include<linux/irq.h>#include<linux/irqdomain.h>#include<linux/pm_runtime.h>#include<linux/regmap.h>#include<linux/slab.h>#include"internal.h"structregmap_irq_chip_data{structmutexlock;structirq_chipirq_chip;structregmap*map;conststructregmap_irq_chip*chip;intirq_base;structirq_domain*domain;intirq;intwake_count;unsignedintmask_base;unsignedintunmask_base;void*status_reg_buf;unsignedint*main_status_buf;unsignedint*status_buf;unsignedint*mask_buf;unsignedint*mask_buf_def;unsignedint*wake_buf;unsignedint*type_buf;unsignedint*type_buf_def;unsignedint**virt_buf;unsignedint**config_buf;unsignedintirq_reg_stride;unsignedint(*get_irq_reg)(structregmap_irq_chip_data*data,unsignedintbase,intindex);unsignedintclear_status:1;};staticinlineconststructregmap_irq*irq_to_regmap_irq(structregmap_irq_chip_data*data,intirq){return&data->chip->irqs[irq];}staticboolregmap_irq_can_bulk_read_status(structregmap_irq_chip_data*data){structregmap*map=data->map;/* * While possible that a user-defined ->get_irq_reg() callback might * be linear enough to support bulk reads, most of the time it won't. * Therefore only allow them if the default callback is being used. */returndata->irq_reg_stride==1&&map->reg_stride==1&&data->get_irq_reg==regmap_irq_get_irq_reg_linear&&!map->use_single_read;}staticvoidregmap_irq_lock(structirq_data*data){structregmap_irq_chip_data*d=irq_data_get_irq_chip_data(data);