180 lines
4.0 KiB
C
180 lines
4.0 KiB
C
|
/*
|
||
|
* Copyright (C) 2008 HTC, Inc.
|
||
|
* Copyright (C) 2008 Google, Inc.
|
||
|
*
|
||
|
* This software is licensed under the terms of the GNU General Public
|
||
|
* License version 2, as published by the Free Software Foundation, and
|
||
|
* may be copied, distributed, and modified under those terms.
|
||
|
*
|
||
|
* 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.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#ifndef __ASM_ARCH_HTC_HEADSET_H
|
||
|
#define __ASM_ARCH_HTC_HEADSET_H
|
||
|
|
||
|
struct h2w_platform_data {
|
||
|
char *power_name;
|
||
|
int cable_in1;
|
||
|
int cable_in2;
|
||
|
int h2w_clk;
|
||
|
int h2w_data;
|
||
|
int debug_uart;
|
||
|
int headset_mic_35mm;
|
||
|
void (*config_cpld)(int);
|
||
|
void (*init_cpld)(void);
|
||
|
void (*set_dat)(int);
|
||
|
void (*set_clk)(int);
|
||
|
void (*set_dat_dir)(int);
|
||
|
void (*set_clk_dir)(int);
|
||
|
int (*get_dat)(void);
|
||
|
int (*get_clk)(void);
|
||
|
};
|
||
|
|
||
|
#define BIT_HEADSET (1 << 0)
|
||
|
#define BIT_HEADSET_NO_MIC (1 << 1)
|
||
|
#define BIT_TTY (1 << 2)
|
||
|
#define BIT_FM_HEADSET (1 << 3)
|
||
|
#define BIT_FM_SPEAKER (1 << 4)
|
||
|
#define BIT_TTY_VCO (1 << 5)
|
||
|
#define BIT_TTY_HCO (1 << 6)
|
||
|
#define BIT_35MM_HEADSET (1 << 7)
|
||
|
|
||
|
enum {
|
||
|
H2W_NO_DEVICE = 0,
|
||
|
H2W_HTC_HEADSET = 1,
|
||
|
NORMAL_HEARPHONE= 2,
|
||
|
H2W_DEVICE = 3,
|
||
|
H2W_USB_CRADLE = 4,
|
||
|
H2W_UART_DEBUG = 5,
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
H2W_GPIO = 0,
|
||
|
H2W_UART1 = 1,
|
||
|
H2W_UART3 = 2,
|
||
|
H2W_BT = 3
|
||
|
};
|
||
|
|
||
|
#define RESEND_DELAY (3) /* ms */
|
||
|
#define MAX_ACK_RESEND_TIMES (6) /* follow spec */
|
||
|
#define MAX_HOST_RESEND_TIMES (3) /* follow spec */
|
||
|
#define MAX_HYGEIA_RESEND_TIMES (5)
|
||
|
|
||
|
#define H2W_ASCR_DEVICE_INI (0x01)
|
||
|
#define H2W_ASCR_ACT_EN (0x02)
|
||
|
#define H2W_ASCR_PHONE_IN (0x04)
|
||
|
#define H2W_ASCR_RESET (0x08)
|
||
|
#define H2W_ASCR_AUDIO_IN (0x10)
|
||
|
|
||
|
#define H2W_LED_OFF (0x0)
|
||
|
#define H2W_LED_BKL (0x1)
|
||
|
#define H2W_LED_MTL (0x2)
|
||
|
|
||
|
typedef enum {
|
||
|
/* === system group 0x0000~0x00FF === */
|
||
|
/* (R) Accessory type register */
|
||
|
H2W_SYSTEM = 0x0000,
|
||
|
/* (R) Maximum group address */
|
||
|
H2W_MAX_GP_ADD = 0x0001,
|
||
|
/* (R/W) Accessory system control register0 */
|
||
|
H2W_ASCR0 = 0x0002,
|
||
|
|
||
|
/* === key group 0x0100~0x01FF === */
|
||
|
/* (R) Key group maximum sub address */
|
||
|
H2W_KEY_MAXADD = 0x0100,
|
||
|
/* (R) ASCII key press down flag */
|
||
|
H2W_ASCII_DOWN = 0x0101,
|
||
|
/* (R) ASCII key release up flag */
|
||
|
H2W_ASCII_UP = 0x0102,
|
||
|
/* (R) Function key status flag */
|
||
|
H2W_FNKEY_UPDOWN = 0x0103,
|
||
|
/* (R/W) Key device status */
|
||
|
H2W_KD_STATUS = 0x0104,
|
||
|
|
||
|
/* === led group 0x0200~0x02FF === */
|
||
|
/* (R) LED group maximum sub address */
|
||
|
H2W_LED_MAXADD = 0x0200,
|
||
|
/* (R/W) LED control register0 */
|
||
|
H2W_LEDCT0 = 0x0201,
|
||
|
|
||
|
/* === crdl group 0x0300~0x03FF === */
|
||
|
/* (R) Cardle group maximum sub address */
|
||
|
H2W_CRDL_MAXADD = 0x0300,
|
||
|
/* (R/W) Cardle group function control register0 */
|
||
|
H2W_CRDLCT0 = 0x0301,
|
||
|
|
||
|
/* === car kit group 0x0400~0x04FF === */
|
||
|
H2W_CARKIT_MAXADD = 0x0400,
|
||
|
|
||
|
/* === usb host group 0x0500~0x05FF === */
|
||
|
H2W_USBHOST_MAXADD = 0x0500,
|
||
|
|
||
|
/* === medical group 0x0600~0x06FF === */
|
||
|
H2W_MED_MAXADD = 0x0600,
|
||
|
H2W_MED_CONTROL = 0x0601,
|
||
|
H2W_MED_IN_DATA = 0x0602,
|
||
|
} H2W_ADDR;
|
||
|
|
||
|
|
||
|
typedef struct H2W_INFO {
|
||
|
/* system group */
|
||
|
unsigned char CLK_SP;
|
||
|
int SLEEP_PR;
|
||
|
unsigned char HW_REV;
|
||
|
int AUDIO_DEVICE;
|
||
|
unsigned char ACC_CLASS;
|
||
|
unsigned char MAX_GP_ADD;
|
||
|
|
||
|
/* key group */
|
||
|
int KEY_MAXADD;
|
||
|
int ASCII_DOWN;
|
||
|
int ASCII_UP;
|
||
|
int FNKEY_UPDOWN;
|
||
|
int KD_STATUS;
|
||
|
|
||
|
/* led group */
|
||
|
int LED_MAXADD;
|
||
|
int LEDCT0;
|
||
|
|
||
|
/* medical group */
|
||
|
int MED_MAXADD;
|
||
|
unsigned char AP_ID;
|
||
|
unsigned char AP_EN;
|
||
|
unsigned char DATA_EN;
|
||
|
} H2W_INFO;
|
||
|
|
||
|
typedef enum {
|
||
|
H2W_500KHz = 1,
|
||
|
H2W_250KHz = 2,
|
||
|
H2W_166KHz = 3,
|
||
|
H2W_125KHz = 4,
|
||
|
H2W_100KHz = 5,
|
||
|
H2W_83KHz = 6,
|
||
|
H2W_71KHz = 7,
|
||
|
H2W_62KHz = 8,
|
||
|
H2W_55KHz = 9,
|
||
|
H2W_50KHz = 10,
|
||
|
} H2W_SPEED;
|
||
|
|
||
|
typedef enum {
|
||
|
H2W_KEY_INVALID = -1,
|
||
|
H2W_KEY_PLAY = 0,
|
||
|
H2W_KEY_FORWARD = 1,
|
||
|
H2W_KEY_BACKWARD = 2,
|
||
|
H2W_KEY_VOLUP = 3,
|
||
|
H2W_KEY_VOLDOWN = 4,
|
||
|
H2W_KEY_PICKUP = 5,
|
||
|
H2W_KEY_HANGUP = 6,
|
||
|
H2W_KEY_MUTE = 7,
|
||
|
H2W_KEY_HOLD = 8,
|
||
|
H2W_NUM_KEYFUNC = 9,
|
||
|
} KEYFUNC;
|
||
|
|
||
|
extern int turn_mic_bias_on(int on);
|
||
|
|
||
|
#endif
|