blob: 5bea7a2bed3d76343609a49b4f8322eb9615c858 [file] [log] [blame]
/*
* 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