#define pr_fmt(fmt) …
#include <linux/cleanup.h>
#include <linux/debugfs.h>
#include <linux/device.h>
#include <linux/gpio/driver.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irq_sim.h>
#include <linux/irqdomain.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
#include <linux/string_helpers.h>
#include <linux/uaccess.h>
#define GPIO_MOCKUP_MAX_GC …
#define GPIO_MOCKUP_MAX_RANGES …
#define GPIO_MOCKUP_MAX_PROP …
struct gpio_mockup_line_status { … };
struct gpio_mockup_chip { … };
struct gpio_mockup_dbgfs_private { … };
static int gpio_mockup_ranges[GPIO_MOCKUP_MAX_RANGES];
static int gpio_mockup_num_ranges;
module_param_array(…);
static bool gpio_mockup_named_lines;
module_param_named(gpio_mockup_named_lines,
gpio_mockup_named_lines, bool, 0400);
static struct dentry *gpio_mockup_dbg_dir;
static int gpio_mockup_range_base(unsigned int index)
{ … }
static int gpio_mockup_range_ngpio(unsigned int index)
{ … }
static int __gpio_mockup_get(struct gpio_mockup_chip *chip,
unsigned int offset)
{ … }
static int gpio_mockup_get(struct gpio_chip *gc, unsigned int offset)
{ … }
static int gpio_mockup_get_multiple(struct gpio_chip *gc,
unsigned long *mask, unsigned long *bits)
{ … }
static void __gpio_mockup_set(struct gpio_mockup_chip *chip,
unsigned int offset, int value)
{ … }
static void gpio_mockup_set(struct gpio_chip *gc,
unsigned int offset, int value)
{ … }
static void gpio_mockup_set_multiple(struct gpio_chip *gc,
unsigned long *mask, unsigned long *bits)
{ … }
static int gpio_mockup_apply_pull(struct gpio_mockup_chip *chip,
unsigned int offset, int value)
{ … }
static int gpio_mockup_set_config(struct gpio_chip *gc,
unsigned int offset, unsigned long config)
{ … }
static int gpio_mockup_dirout(struct gpio_chip *gc,
unsigned int offset, int value)
{ … }
static int gpio_mockup_dirin(struct gpio_chip *gc, unsigned int offset)
{ … }
static int gpio_mockup_get_direction(struct gpio_chip *gc, unsigned int offset)
{ … }
static int gpio_mockup_to_irq(struct gpio_chip *gc, unsigned int offset)
{ … }
static int gpio_mockup_request(struct gpio_chip *gc, unsigned int offset)
{ … }
static void gpio_mockup_free(struct gpio_chip *gc, unsigned int offset)
{ … }
static ssize_t gpio_mockup_debugfs_read(struct file *file,
char __user *usr_buf,
size_t size, loff_t *ppos)
{ … }
static ssize_t gpio_mockup_debugfs_write(struct file *file,
const char __user *usr_buf,
size_t size, loff_t *ppos)
{ … }
static int gpio_mockup_debugfs_open(struct inode *inode, struct file *file)
{ … }
static const struct file_operations gpio_mockup_debugfs_ops = …;
static void gpio_mockup_debugfs_setup(struct device *dev,
struct gpio_mockup_chip *chip)
{ … }
static void gpio_mockup_debugfs_cleanup(void *data)
{ … }
static void gpio_mockup_dispose_mappings(void *data)
{ … }
static int gpio_mockup_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id gpio_mockup_of_match[] = …;
MODULE_DEVICE_TABLE(of, gpio_mockup_of_match);
static struct platform_driver gpio_mockup_driver = …;
static struct platform_device *gpio_mockup_pdevs[GPIO_MOCKUP_MAX_GC];
static void gpio_mockup_unregister_pdevs(void)
{ … }
static int __init gpio_mockup_register_chip(int idx)
{ … }
static int __init gpio_mockup_init(void)
{ … }
static void __exit gpio_mockup_exit(void)
{ … }
module_init(…) …;
module_exit(gpio_mockup_exit);
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;