217 lines
5.6 KiB
C
217 lines
5.6 KiB
C
/*
|
|
* SiI8620 Linux Driver
|
|
*
|
|
* Copyright (C) 2013-2014 Silicon Image, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation version 2.
|
|
* This program is distributed AS-IS WITHOUT ANY WARRANTY of any
|
|
* kind, whether express or implied; INCLUDING without the implied warranty
|
|
* of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE or NON-INFRINGEMENT.
|
|
* See the GNU General Public License for more details at
|
|
* http://www.gnu.org/licenses/gpl-2.0.html.
|
|
*/
|
|
|
|
#ifndef _SI_MDT_INPUTDEV_H_
|
|
#define _SI_MDT_INPUTDEV_H_
|
|
|
|
#define HID_INPUT_REPORT_CNT 7
|
|
#define MAX_TOUCH_CONTACTS 4
|
|
|
|
/* MDT header byte bit definitions */
|
|
#define REGISTRATION_SUCCESS 0
|
|
#define REGISTRATION_ERROR 1
|
|
#define KEY_PRESSED 1
|
|
#define KEY_RELEASED 0
|
|
#define MDT_TOUCH_INACTIVE 1
|
|
#define MDT_TOUCH_ACTIVE 2
|
|
|
|
/* Common header bit definitions */
|
|
#define MDT_HDR_IS_HID 0x80
|
|
#define MDT_HDR_IS_PORT_B 0x40
|
|
#define MDT_HDR_IS_KEYBOARD 0x20
|
|
#define MDT_HDR_IS_NOT_LAST 0x10
|
|
#define MDT_HDR_IS_NOT_MOUSE 0x08
|
|
|
|
/* Keyboard event specific header bit definitions */
|
|
#define MDT_HDR_KBD_LEFT_ALT 0x04
|
|
#define MDT_HDR_KBD_LEFT_SHIFT 0x02
|
|
#define MDT_HDR_KBD_LEFT_CTRL 0x01
|
|
|
|
/* Mouse event specific header bit definitions */
|
|
#define MDT_HDR_MOUSE_BUTTON_3 0x04
|
|
#define MDT_HDR_MOUSE_BUTTON_2 0x02
|
|
#define MDT_HDR_MOUSE_BUTTON_1 0x01
|
|
#define MDT_HDR_MOUSE_BUTTON_MASK 0x07
|
|
|
|
/* Touch pad event specific header bit definitions */
|
|
#define MDT_HDR_TOUCH_IS_TOUCHED 0x01
|
|
#define MDT_HDR_TOUCH_CONTACT_ID_MASK 0x06
|
|
|
|
/* Game controller event specific header bit definitions */
|
|
#define MDT_HDR_GAME_BUTTON_3 0x04
|
|
#define MDT_HDR_GAME_BUTTON_2 0x02
|
|
#define MDT_HDR_GAME_BUTTON_1 0x01
|
|
|
|
/* MDT hot-plug prefix and event information */
|
|
#define MDT_VERSION 1
|
|
#define M_CHAR 'M'
|
|
#define D_CHAR 'D'
|
|
#define T_CHAR 'T'
|
|
#define NOTICE_DEV_PLUG 'R'
|
|
#define NOTICE_DEV_UNPLUG 'U'
|
|
#define RESPONSE_ACK 'A'
|
|
#define RESPONSE_NACK 'N'
|
|
|
|
/* MDT Touch screen resources and parameters */
|
|
|
|
#define MDT_TOUCH_X 0
|
|
#define MDT_TOUCH_Y 1
|
|
#define BYTE_LOW 0
|
|
#define BYTE_HIGH 1
|
|
#define MDT_TOUCH_X_LOW BYTE_LOW
|
|
#define MDT_TOUCH_X_HIGH BYTE_HIGH
|
|
#define MDT_TOUCH_Y_LOW BYTE_LOW
|
|
#define MDT_TOUCH_Y_HIGH BYTE_HIGH
|
|
|
|
/* support 11 bit absolute addressing */
|
|
#define X_CORNER_RIGHT_LOWER 1870
|
|
#define Y_CORNER_RIGHT_LOWER 1870
|
|
#define ICS_BeagleboardxM 1
|
|
#define X_MAX 1920
|
|
#define Y_MAX 1920
|
|
#define SCALE_X_RAW 0
|
|
#define SCALE_X_SCREEN 0
|
|
#define SCALE_Y_RAW 0
|
|
#define SCALE_Y_SCREEN 0
|
|
#define X_SHIFT 0
|
|
#define Y_SHIFT 0
|
|
#define SWAP_LEFTRIGHT 0
|
|
#define SWAP_UPDOWN 0
|
|
#define SWAP_XY 0
|
|
#define SINGLE_TOUCH 1
|
|
#define CORNER_BUTTON 1
|
|
#define ICS_BAR 0
|
|
#define RIGHT_MOUSE_BUTTON_IS_ESC 1
|
|
/* requires installation of IDC file */
|
|
/* #define KERNEL_2_6_38_AND_LATER */
|
|
/* as of JB the IDC file is needed but, doesn't
|
|
guarantee acess to virtual buttons. */
|
|
#define JB_421 0
|
|
#if (JB_421 == 1)
|
|
#define X_BUTTON_BAR_START 0x4F0
|
|
#define Y_BUTTON_RECENTAPPS_TOP 0x050
|
|
#define Y_BUTTON_RECENTAPPS_BOTTOM 0x165
|
|
#define Y_BUTTON_HOME_TOP 0x185
|
|
#define Y_BUTTON_HOME_BOTTOM 0x2C0
|
|
#define Y_BUTTON_BACK_TOP 0x2E0
|
|
#define Y_BUTTON_BACK_BOTTOM 0x3E0
|
|
#endif
|
|
|
|
enum mdt_dev_state_e {
|
|
INPUT_DISABLED,
|
|
INPUT_WAITING_FOR_REGISTRATION,
|
|
INPUT_ACTIVE
|
|
};
|
|
|
|
enum mdt_dev_types_e {
|
|
MDT_TYPE_MOUSE,
|
|
MDT_TYPE_KEYBOARD,
|
|
MDT_TYPE_TOUCHSCREEN,
|
|
MDT_TYPE_COUNT
|
|
};
|
|
|
|
struct mdt_touch_history_t {
|
|
uint32_t abs_x;
|
|
uint32_t abs_y;
|
|
uint8_t isTouched;
|
|
uint8_t state;
|
|
};
|
|
|
|
struct mdt_inputdevs {
|
|
/* Prior HID input report */
|
|
uint8_t keycodes_old[HID_INPUT_REPORT_CNT];
|
|
/* Current HID input report */
|
|
uint8_t keycodes_new[HID_INPUT_REPORT_CNT];
|
|
struct input_dev *dev_keyboard;
|
|
struct input_dev *dev_mouse;
|
|
struct input_dev *dev_touchscreen;
|
|
/* Instance tracking variable */
|
|
uint8_t is_dev_registered[MDT_TYPE_COUNT];
|
|
struct mdt_touch_history_t prior_touch_events[MAX_TOUCH_CONTACTS];
|
|
unsigned char prior_touch_button;
|
|
|
|
#if (RIGHT_MOUSE_BUTTON_IS_ESC == 1)
|
|
unsigned char prior_right_button;
|
|
#endif
|
|
/* ser overrides to allow runtime calibration */
|
|
uint32_t x_max, y_max;
|
|
uint32_t x_screen, x_raw, x_shift;
|
|
uint32_t y_screen, y_raw, y_shift;
|
|
uint32_t swap_xy, swap_updown, swap_leftright;
|
|
};
|
|
|
|
struct keyboard_event_data {
|
|
uint8_t first_key[3];
|
|
uint8_t second_key[3];
|
|
};
|
|
|
|
struct mouse_event_data {
|
|
int8_t x_displacement;
|
|
int8_t y_displacement;
|
|
int8_t z_displacement;
|
|
uint8_t vendor_specific[2];
|
|
uint8_t vendor_specific_game_flag;
|
|
};
|
|
|
|
struct touch_pad_event_data {
|
|
uint8_t x_abs_coordinate[2];
|
|
uint8_t y_abs_coordinate[2];
|
|
uint8_t vendor_specific;
|
|
uint8_t vendor_specific_game_flag;
|
|
};
|
|
|
|
struct gaming_controller {
|
|
int8_t x_rel_displacement;
|
|
int8_t y_rel_displacement;
|
|
int8_t z_rel_displacement;
|
|
int8_t y2_rel_displacement;
|
|
uint8_t buttons_ext;
|
|
uint8_t id_dpad;
|
|
};
|
|
|
|
struct mdt_hotplug_data {
|
|
uint8_t sub_header_d;
|
|
uint8_t sub_header_t;
|
|
uint8_t event_code;
|
|
uint8_t device_type;
|
|
uint8_t mdt_version;
|
|
uint8_t reserved;
|
|
};
|
|
|
|
struct mdt_packet {
|
|
uint8_t adopter_id_h;
|
|
uint8_t adopter_id_l;
|
|
uint8_t header;
|
|
union {
|
|
struct keyboard_event_data keyboard;
|
|
struct mouse_event_data mouse;
|
|
struct touch_pad_event_data touch_pad;
|
|
struct gaming_controller game_controller;
|
|
struct mdt_hotplug_data hotplug;
|
|
uint8_t bytes[6];
|
|
} event;
|
|
};
|
|
|
|
struct mhl_dev_context;
|
|
extern struct attribute_group mdt_attr_group;
|
|
void mdt_toggle_keyboard_keycode(struct mhl_dev_context *dev_context,
|
|
unsigned char keycode);
|
|
bool si_mhl_tx_mdt_process_packet(struct mhl_dev_context *dev_context,
|
|
void *packet);
|
|
|
|
void mdt_destroy(struct mhl_dev_context *dev_context);
|
|
|
|
#endif /* #ifndef _SI_MDT_INPUTDEV_H_ */
|