// SPDX-License-Identifier: GPL-2.0-or-later/* * Reset Controller framework * * Copyright 2013 Philipp Zabel, Pengutronix */#include<linux/atomic.h>#include<linux/cleanup.h>#include<linux/device.h>#include<linux/err.h>#include<linux/export.h>#include<linux/kernel.h>#include<linux/kref.h>#include<linux/gpio/driver.h>#include<linux/gpio/machine.h>#include<linux/idr.h>#include<linux/module.h>#include<linux/of.h>#include<linux/acpi.h>#include<linux/platform_device.h>#include<linux/reset.h>#include<linux/reset-controller.h>#include<linux/slab.h>staticDEFINE_MUTEX(reset_list_mutex);staticLIST_HEAD(reset_controller_list);staticDEFINE_MUTEX(reset_lookup_mutex);staticLIST_HEAD(reset_lookup_list);/* Protects reset_gpio_lookup_list */staticDEFINE_MUTEX(reset_gpio_lookup_mutex);staticLIST_HEAD(reset_gpio_lookup_list);staticDEFINE_IDA(reset_gpio_ida);/** * struct reset_control - a reset control * @rcdev: a pointer to the reset controller device * this reset control belongs to * @list: list entry for the rcdev's reset controller list * @id: ID of the reset controller in the reset * controller device * @refcnt: Number of gets of this reset_control * @acquired: Only one reset_control may be acquired for a given rcdev and id. * @shared: Is this a shared (1), or an exclusive (0) reset_control? * @array: Is this an array of reset controls (1)? * @deassert_count: Number of times this reset line has been deasserted * @triggered_count: Number of times this reset line has been reset. Currently * only used for shared resets, which means that the value * will be either 0 or 1. */structreset_control{structreset_controller_dev*rcdev;structlist_headlist;unsignedintid;structkrefrefcnt;boolacquired;boolshared;boolarray;atomic_tdeassert_count;atomic_ttr