cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rmi_driver.h (4292B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2011-2016 Synaptics Incorporated
      4 * Copyright (c) 2011 Unixphere
      5 */
      6
      7#ifndef _RMI_DRIVER_H
      8#define _RMI_DRIVER_H
      9
     10#include <linux/ctype.h>
     11#include <linux/hrtimer.h>
     12#include <linux/ktime.h>
     13#include <linux/input.h>
     14#include "rmi_bus.h"
     15
     16#define SYNAPTICS_INPUT_DEVICE_NAME "Synaptics RMI4 Touch Sensor"
     17#define SYNAPTICS_VENDOR_ID 0x06cb
     18
     19#define GROUP(_attrs) { \
     20	.attrs = _attrs,  \
     21}
     22
     23#define PDT_PROPERTIES_LOCATION 0x00EF
     24#define BSR_LOCATION 0x00FE
     25
     26#define RMI_PDT_PROPS_HAS_BSR 0x02
     27
     28#define NAME_BUFFER_SIZE 256
     29
     30#define RMI_PDT_ENTRY_SIZE 6
     31#define RMI_PDT_FUNCTION_VERSION_MASK   0x60
     32#define RMI_PDT_INT_SOURCE_COUNT_MASK   0x07
     33
     34#define PDT_START_SCAN_LOCATION 0x00e9
     35#define PDT_END_SCAN_LOCATION	0x0005
     36#define RMI4_END_OF_PDT(id) ((id) == 0x00 || (id) == 0xff)
     37
     38struct pdt_entry {
     39	u16 page_start;
     40	u8 query_base_addr;
     41	u8 command_base_addr;
     42	u8 control_base_addr;
     43	u8 data_base_addr;
     44	u8 interrupt_source_count;
     45	u8 function_version;
     46	u8 function_number;
     47};
     48
     49#define RMI_REG_DESC_PRESENSE_BITS	(32 * BITS_PER_BYTE)
     50#define RMI_REG_DESC_SUBPACKET_BITS	(37 * BITS_PER_BYTE)
     51
     52/* describes a single packet register */
     53struct rmi_register_desc_item {
     54	u16 reg;
     55	unsigned long reg_size;
     56	u8 num_subpackets;
     57	unsigned long subpacket_map[BITS_TO_LONGS(
     58				RMI_REG_DESC_SUBPACKET_BITS)];
     59};
     60
     61/*
     62 * describes the packet registers for a particular type
     63 * (ie query, control, data)
     64 */
     65struct rmi_register_descriptor {
     66	unsigned long struct_size;
     67	unsigned long presense_map[BITS_TO_LONGS(RMI_REG_DESC_PRESENSE_BITS)];
     68	u8 num_registers;
     69	struct rmi_register_desc_item *registers;
     70};
     71
     72int rmi_read_register_desc(struct rmi_device *d, u16 addr,
     73				struct rmi_register_descriptor *rdesc);
     74const struct rmi_register_desc_item *rmi_get_register_desc_item(
     75				struct rmi_register_descriptor *rdesc, u16 reg);
     76
     77/*
     78 * Calculate the total size of all of the registers described in the
     79 * descriptor.
     80 */
     81size_t rmi_register_desc_calc_size(struct rmi_register_descriptor *rdesc);
     82int rmi_register_desc_calc_reg_offset(
     83			struct rmi_register_descriptor *rdesc, u16 reg);
     84bool rmi_register_desc_has_subpacket(const struct rmi_register_desc_item *item,
     85			u8 subpacket);
     86
     87bool rmi_is_physical_driver(struct device_driver *);
     88int rmi_register_physical_driver(void);
     89void rmi_unregister_physical_driver(void);
     90void rmi_free_function_list(struct rmi_device *rmi_dev);
     91struct rmi_function *rmi_find_function(struct rmi_device *rmi_dev, u8 number);
     92int rmi_enable_sensor(struct rmi_device *rmi_dev);
     93int rmi_scan_pdt(struct rmi_device *rmi_dev, void *ctx,
     94		 int (*callback)(struct rmi_device *rmi_dev, void *ctx,
     95		 const struct pdt_entry *entry));
     96int rmi_probe_interrupts(struct rmi_driver_data *data);
     97void rmi_enable_irq(struct rmi_device *rmi_dev, bool clear_wake);
     98void rmi_disable_irq(struct rmi_device *rmi_dev, bool enable_wake);
     99int rmi_init_functions(struct rmi_driver_data *data);
    100int rmi_initial_reset(struct rmi_device *rmi_dev, void *ctx,
    101		      const struct pdt_entry *pdt);
    102
    103const char *rmi_f01_get_product_ID(struct rmi_function *fn);
    104
    105#ifdef CONFIG_RMI4_F03
    106int rmi_f03_overwrite_button(struct rmi_function *fn, unsigned int button,
    107			     int value);
    108void rmi_f03_commit_buttons(struct rmi_function *fn);
    109#else
    110static inline int rmi_f03_overwrite_button(struct rmi_function *fn,
    111					   unsigned int button, int value)
    112{
    113	return 0;
    114}
    115static inline void rmi_f03_commit_buttons(struct rmi_function *fn) {}
    116#endif
    117
    118#ifdef CONFIG_RMI4_F34
    119int rmi_f34_create_sysfs(struct rmi_device *rmi_dev);
    120void rmi_f34_remove_sysfs(struct rmi_device *rmi_dev);
    121#else
    122static inline int rmi_f34_create_sysfs(struct rmi_device *rmi_dev)
    123{
    124	return 0;
    125}
    126
    127static inline void rmi_f34_remove_sysfs(struct rmi_device *rmi_dev)
    128{
    129}
    130#endif /* CONFIG_RMI_F34 */
    131
    132extern struct rmi_function_handler rmi_f01_handler;
    133extern struct rmi_function_handler rmi_f03_handler;
    134extern struct rmi_function_handler rmi_f11_handler;
    135extern struct rmi_function_handler rmi_f12_handler;
    136extern struct rmi_function_handler rmi_f30_handler;
    137extern struct rmi_function_handler rmi_f34_handler;
    138extern struct rmi_function_handler rmi_f3a_handler;
    139extern struct rmi_function_handler rmi_f54_handler;
    140extern struct rmi_function_handler rmi_f55_handler;
    141#endif