| /****************************************************************************** |
| * |
| * Copyright 2011, Cypress Semiconductor Corporation. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * |
| * 2. Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * |
| * 3. Neither the name of the Cypress Semiconductor Corporation, nor the names |
| * of its contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY Cypress Semiconductor Corporation ''AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Cypress Semiconductor Corporation |
| * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| * The views and conclusions contained in the software and documentation are |
| * those of the authors and should not be interpreted as representing official |
| * policies, either expressed or implied, of Cypress Semiconductor Corporation. |
| * |
| ******************************************************************************* |
| * |
| * Authors: |
| * Dudley Du <dudl@cypress.com> |
| * Usage: |
| * The head file that will be included in cyapa_fw_update.c file. |
| * Version: |
| * 1.0.0 2011/07/26 Inital release of cyapa_fw_update utility tool. |
| */ |
| |
| #ifndef _CYAPA_H |
| #define _CYAPA_H |
| |
| #include <linux/types.h> |
| #include <linux/ioctl.h> |
| |
| #define CYAPA_I2C_NAME "cypress_i2c_apa" |
| #define CYAPA_MISC_NAME "cyapa" |
| |
| /* Active power state scanning/processing refresh interval time. unit: ms. */ |
| #define CYAPA_POLLING_INTERVAL_TIME_ACTIVE 0x00 |
| /* Low power state scanning/processing refresh interval time. unit: ms. */ |
| #define CYAPA_POLLING_INTERVAL_TIME_LOWPOWER 0x10 |
| /* Touch timeout for active power state. unit: ms. */ |
| #define CYAPA_ACTIVE_TOUCH_TIMEOUT 0xFF |
| |
| /* Max report rate limited for Cypress Trackpad. */ |
| #define CYAPA_NO_LIMITED_REPORT_RATE 0 |
| #define CYAPA_REPORT_RATE (CYAPA_NO_LIMITED_REPORT_RATE) |
| #define CYAPA_POLLING_REPORTRATE_DEFAULT 60 |
| |
| /* trackpad device */ |
| enum cyapa_work_mode { |
| CYAPA_STREAM_MODE = 0x00, |
| CYAPA_BOOTLOAD_MODE = 0x01, |
| }; |
| |
| /* APA trackpad firmware generation */ |
| enum cyapa_gen { |
| CYAPA_GEN1 = 0x01, /* only one finger supported. */ |
| CYAPA_GEN2 = 0x02, /* max five fingers supported. */ |
| CYAPA_GEN3 = 0x03, /* support MT-protocol with tracking ID. */ |
| }; |
| |
| /* |
| * APA trackpad power states. |
| * Used in register 0x00, bit3-2, PowerMode field. |
| */ |
| enum cyapa_powerstate { |
| CYAPA_PWR_ACTIVE = 0x01, |
| CYAPA_PWR_LIGHT_SLEEP = 0x02, |
| CYAPA_PWR_MEDIUM_SLEEP = 0x03, |
| CYAPA_PWR_DEEP_SLEEP = 0x04, |
| }; |
| |
| struct cyapa_platform_data { |
| __u32 flag; /* reserved for future use. */ |
| enum cyapa_gen gen; /* trackpad firmware generation. */ |
| enum cyapa_powerstate power_state; |
| |
| /* active mode, polling refresh interval; ms */ |
| __u8 polling_interval_time_active; |
| /* low power mode, polling refresh interval; ms */ |
| __u8 polling_interval_time_lowpower; |
| __u8 active_touch_timeout; /* active touch timeout; ms */ |
| char *name; /* device name of Cypress I2C trackpad. */ |
| /* the gpio id used for interrupt to notify host data is ready. */ |
| __s16 irq_gpio; |
| __u32 report_rate; /* max limitation of data report rate. */ |
| |
| int (*wakeup)(void); |
| int (*init)(void); |
| }; |
| |
| |
| /* |
| * Data structures for /dev/cyapa device ioclt read/write. |
| */ |
| struct cyapa_misc_ioctl_data { |
| __u8 *buf; /* pointer to a buffer for read/write data. */ |
| __u16 len; /* valid data length in buf. */ |
| __u16 flag; /* additional flag to special ioctl command. */ |
| __u16 rev; /* reserved. */ |
| }; |
| |
| struct cyapa_driver_ver { |
| __u8 major_ver; |
| __u8 minor_ver; |
| __u8 revision; |
| }; |
| |
| struct cyapa_firmware_ver { |
| __u8 major_ver; |
| __u8 minor_ver; |
| }; |
| |
| struct cyapa_hardware_ver { |
| __u8 major_ver; |
| __u8 minor_ver; |
| }; |
| |
| struct cyapa_protocol_ver { |
| __u8 protocol_gen; |
| }; |
| |
| struct cyapa_trackpad_run_mode { |
| __u8 run_mode; |
| __u8 bootloader_state; |
| /* |
| * rev_cmd is only use it when sending run mode switch command. |
| * in other situation, this field should be reserved and set to 0. |
| */ |
| __u8 rev_cmd; |
| }; |
| #define CYAPA_OPERATIONAL_MODE 0x00 |
| #define CYAPA_BOOTLOADER_MODE 0x01 |
| #define CYAPA_BOOTLOADER_IDLE_STATE 0x00 |
| #define CYAPA_BOOTLOADER_ACTIVE_STATE 0x01 |
| #define CYAPA_BOOTLOADER_INVALID_STATE 0xff |
| |
| /* trackpad run mode switch command. */ |
| #define CYAPA_CMD_APP_TO_IDLE 0x10 |
| #define CYAPA_CMD_IDLE_TO_ACTIVE 0x20 |
| #define CYAPA_CMD_ACTIVE_TO_IDLE 0x30 |
| #define CYAPA_CMD_IDLE_TO_APP 0x40 |
| |
| /* |
| * Macro codes for misc device ioctl functions. |
| *********************************************************** |
| |device type|serial num|direction| data bytes | |
| |-----------|----------|---------|-------------| |
| | 8 bit | 8 bit | 2 bit | 8~14 bit | |
| |-----------|----------|---------|-------------| |
| *********************************************************** |
| */ |
| #define CYAPA_IOC_MAGIC 'C' |
| #define CYAPA_IOC(nr) _IOC(_IOC_NONE, CYAPA_IOC_MAGIC, nr, 0) |
| /* bytes value is the location of the data read/written by the ioctl. */ |
| #define CYAPA_IOC_R(nr, bytes) _IOC(IOC_OUT, CYAPA_IOC_MAGIC, nr, bytes) |
| #define CYAPA_IOC_W(nr, bytes) _IOC(IOC_IN, CYAPA_IOC_MAGIC, nr, bytes) |
| #define CYAPA_IOC_RW(nr, bytes) _IOC(IOC_INOUT, CYAPA_IOC_MAGIC, nr, bytes) |
| |
| /* |
| * The following ioctl commands are only valid |
| * when firmware working in operational mode. |
| */ |
| #define CYAPA_GET_PRODUCT_ID CYAPA_IOC_R(0x00, 16) |
| #define CYAPA_GET_DRIVER_VER CYAPA_IOC_R(0x01, 3) |
| #define CYAPA_GET_FIRMWARE_VER CYAPA_IOC_R(0x02, 2) |
| #define CYAPA_GET_HARDWARE_VER CYAPA_IOC_R(0x03, 2) |
| #define CYAPA_GET_PROTOCOL_VER CYAPA_IOC_R(0x04, 1) |
| |
| #define CYAPA_GET_TRACKPAD_RUN_MODE CYAPA_IOC_R(0x40, 2) |
| #define CYAYA_SEND_MODE_SWITCH_CMD CYAPA_IOC(0x50) |
| |
| #endif /* #ifndef _CYAPA_H */ |