M7350/kernel/drivers/input/touchscreen/synaptics/rmi_drvr.h

105 lines
3.4 KiB
C
Raw Normal View History

2024-09-09 08:52:07 +00:00
/**
*
* Synaptics Register Mapped Interface (RMI4) RMI Driver Header File.
* Copyright (c) 2007 - 2011, Synaptics Incorporated
*
*
*/
/*
* This file is licensed under the GPL2 license.
*
*#############################################################################
* GPL
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
*#############################################################################
*/
#include "rmi.h"
#ifndef _RMI_DRVR_H
#define _RMI_DRVR_H
#include <linux/input/rmi_platformdata.h>
/* RMI4 Protocol Support
*/
struct rmi_phys_driver {
char *name;
int (*write)(struct rmi_phys_driver *physdrvr, unsigned short address,
char data);
int (*read)(struct rmi_phys_driver *physdrvr, unsigned short address,
char *buffer);
int (*write_multiple)(struct rmi_phys_driver *physdrvr,
unsigned short address, char *buffer, int length);
int (*read_multiple)(struct rmi_phys_driver *physdrvr, unsigned short address,
char *buffer, int length);
void (*attention)(struct rmi_phys_driver *physdrvr, int instance);
bool polling_required;
int irq;
/* Standard kernel linked list implementation.
* Documentation on how to use it can be found at
* http://isis.poly.edu/kulesh/stuff/src/klist/.
*/
struct list_head drivers;
struct rmi_sensor_driver *sensor;
struct module *module;
};
int rmi_read(struct rmi_sensor_driver *sensor, unsigned short address, char *dest);
int rmi_write(struct rmi_sensor_driver *sensor, unsigned short address,
unsigned char data);
int rmi_read_multiple(struct rmi_sensor_driver *sensor, unsigned short address,
char *dest, int length);
int rmi_write_multiple(struct rmi_sensor_driver *sensor, unsigned short address,
unsigned char *data, int length);
int rmi_register_sensor(struct rmi_phys_driver *physdrvr,
struct rmi_sensordata *sensordata);
int rmi_unregister_sensors(struct rmi_phys_driver *physdrvr);
/* Utility routine to set bits in a register. */
int rmi_set_bits(struct rmi_sensor_driver *sensor, unsigned short address, unsigned char bits);
/* Utility routine to clear bits in a register. */
int rmi_clear_bits(struct rmi_sensor_driver *sensor, unsigned short address, unsigned char bits);
/* Utility routine to set the value of a bit field in a register. */
int rmi_set_bit_field(struct rmi_sensor_driver *sensor, unsigned short address,
unsigned char field_mask, unsigned char bits);
/* Set this to 1 to turn on code used in detecting buffer leaks. */
#define RMI_ALLOC_STATS 1
#if RMI_ALLOC_STATS
extern int appallocsrmi;
extern int rfiallocsrmi;
extern int fnallocsrmi;
#define INC_ALLOC_STAT(X) (X##allocsrmi++)
#define DEC_ALLOC_STAT(X) \
do { \
if (X##allocsrmi) X##allocsrmi--; \
else printk(KERN_DEBUG "Too many " #X " frees\n"); \
} while (0)
#define CHECK_ALLOC_STAT(X) \
do { \
if (X##allocsrmi) \
printk(KERN_DEBUG "Left over " #X " buffers: %d\n", \
X##allocsrmi); \
} while (0)
#else
#define INC_ALLOC_STAT(X) do { } while (0)
#define DEC_ALLOC_STAT(X) do { } while (0)
#define CHECK_ALLOC_STAT(X) do { } while (0)
#endif
#endif