/* * 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