#define pr_fmt(fmt) …
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/libps2.h>
#include <linux/i2c.h>
#include <linux/serio.h>
#include <linux/slab.h>
#include <linux/workqueue.h>
#include "psmouse.h"
struct psmouse_smbus_dev { … };
static LIST_HEAD(psmouse_smbus_list);
static DEFINE_MUTEX(psmouse_smbus_mutex);
static struct workqueue_struct *psmouse_smbus_wq;
static void psmouse_smbus_check_adapter(struct i2c_adapter *adapter)
{ … }
static void psmouse_smbus_detach_i2c_client(struct i2c_client *client)
{ … }
static int psmouse_smbus_notifier_call(struct notifier_block *nb,
unsigned long action, void *data)
{ … }
static struct notifier_block psmouse_smbus_notifier = …;
static psmouse_ret_t psmouse_smbus_process_byte(struct psmouse *psmouse)
{ … }
static int psmouse_smbus_reconnect(struct psmouse *psmouse)
{ … }
struct psmouse_smbus_removal_work { … };
static void psmouse_smbus_remove_i2c_device(struct work_struct *work)
{ … }
static void psmouse_smbus_schedule_remove(struct i2c_client *client)
{ … }
static void psmouse_smbus_disconnect(struct psmouse *psmouse)
{ … }
static int psmouse_smbus_create_companion(struct device *dev, void *data)
{ … }
void psmouse_smbus_cleanup(struct psmouse *psmouse)
{ … }
int psmouse_smbus_init(struct psmouse *psmouse,
const struct i2c_board_info *board,
const void *pdata, size_t pdata_size,
bool need_deactivate,
bool leave_breadcrumbs)
{ … }
int __init psmouse_smbus_module_init(void)
{ … }
void psmouse_smbus_module_exit(void)
{ … }