linux/drivers/macintosh/ams/ams.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#include <linux/i2c.h>
   3#include <linux/input-polldev.h>
   4#include <linux/kthread.h>
   5#include <linux/mutex.h>
   6#include <linux/spinlock.h>
   7#include <linux/types.h>
   8#include <linux/of_device.h>
   9
  10enum ams_irq {
  11        AMS_IRQ_FREEFALL = 0x01,
  12        AMS_IRQ_SHOCK = 0x02,
  13        AMS_IRQ_GLOBAL = 0x04,
  14        AMS_IRQ_ALL =
  15                AMS_IRQ_FREEFALL |
  16                AMS_IRQ_SHOCK |
  17                AMS_IRQ_GLOBAL,
  18};
  19
  20struct ams {
  21        /* Locks */
  22        spinlock_t irq_lock;
  23        struct mutex lock;
  24
  25        /* General properties */
  26        struct device_node *of_node;
  27        struct platform_device *of_dev;
  28        char has_device;
  29        char vflag;
  30        u32 orient1;
  31        u32 orient2;
  32
  33        /* Interrupt worker */
  34        struct work_struct worker;
  35        u8 worker_irqs;
  36
  37        /* Implementation
  38         *
  39         * Only call these functions with the main lock held.
  40         */
  41        void (*exit)(void);
  42
  43        void (*get_xyz)(s8 *x, s8 *y, s8 *z);
  44        u8 (*get_vendor)(void);
  45
  46        void (*clear_irq)(enum ams_irq reg);
  47
  48#ifdef CONFIG_SENSORS_AMS_I2C
  49        /* I2C properties */
  50        struct i2c_client *i2c_client;
  51#endif
  52
  53        /* Joystick emulation */
  54        struct input_polled_dev *idev;
  55        __u16 bustype;
  56
  57        /* calibrated null values */
  58        int xcalib, ycalib, zcalib;
  59};
  60
  61extern struct ams ams_info;
  62
  63extern void ams_sensors(s8 *x, s8 *y, s8 *z);
  64extern int ams_sensor_attach(void);
  65extern void ams_sensor_detach(void);
  66
  67extern int ams_pmu_init(struct device_node *np);
  68extern int ams_i2c_init(struct device_node *np);
  69
  70extern int ams_input_init(void);
  71extern void ams_input_exit(void);
  72