static void spk_un_mute(void) { #if defined(CONFIG_ARCH_TCC88XX) if(machine_is_m801_88()) gpio_set_value(TCC_GPG(6), 1); #elif defined(CONFIG_ARCH_TCC892X) if(machine_is_m805_892x()) { if(system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005) { gpio_set_value(TCC_GPE(18), 1); } else { #if defined(CONFIG_M805S_8923_0XA) gpio_set_value(TCC_GPG(11), 1); #else gpio_set_value(TCC_GPF(27), 1); #endif } } #endif }
static int WriteProtectPortJM2(void) { #if defined(TCC892X_EMMC_BOOT) //for TCC892x #if defined(TARGET_M805_892X_EVM) || defined(BOARD_TCC892X_STB_DEMO) return 0; // 0: Card is not write protected, 1: Card is write protected #else #if (HW_REV == 0x1005)||(HW_REV == 0x1007)||(HW_REV == 0x1008) return (gpio_get(TCC_GPD(10))); #elif (HW_REV == 0x1006) return (gpio_get(TCC_GPD(21))); #else //(HW_REV >= 0x1000)&&(HW_REV <= 0x1004) return (gpio_get(TCC_GPF(29))); #endif #endif #else //for TCC880x PGPIO pGPIO = (PGPIO)(HwGPIO_BASE); return (pGPIO->GPFDAT&Hw11); #endif }
static void SD_HW_InitializePort(void) { #if defined(TCC892X_EMMC_BOOT) #else PGPIO pGPIO = (PGPIO)(HwGPIO_BASE); #endif #if defined(FEATURE_TCC8803F_2CS_V6_JM5_SLOT) //======================================================== // SD/MMC: JM5, SD Port 1 Power ON (GPIO_F13) //======================================================== BITCLR(pGPIO->GPFFN1, 0x00F00000); BITSET(pGPIO->GPFEN, Hw13); BITSET(pGPIO->GPFDAT, Hw13); //======================================================== // SD/MMC: JM5(GPIO_F18~23=SD1, GPIO_F13=CD), SD Port 1 //======================================================== BITCSET(pGPIO->GPFFN2, 0xFFFFFF00, 0x22222200); // SD1_D0 ~ SD1_D3, SD1_CLK, SD1_CMD BITCLR(pGPIO->GPAEN, Hw15); BITCLR(pGPIO->GPFEN, Hw12); BITCSET(pGPIO->GPFFN1, 0x000F0000, 0x00000000); // GPIO_F12 --> SD1_WP BITCSET(pGPIO->GPAFN1, 0xF0000000, 0x00000000); // GPIO_A15 --> SD1_CD BITCSET(pGPIO->GPFCD1, 0x0000FFF0, 0x0000D550); // SD1_CLK(GPIO_F23) Strength: 3, Others:1 #endif #if defined(FEATURE_TCC8803F_2CS_V6_JM2_SLOT) //======================================================== // SD/MMC: JM2, SD Port 3 Power ON (GPIO_F10) //======================================================== BITCLR(pGPIO->GPFFN1, 0x00000F00); BITSET(pGPIO->GPFEN, Hw10); BITSET(pGPIO->GPFDAT, Hw10); //======================================================== // SD/MMC: JM2(GPIO_F0~9=SD3, GPIO_F10=CD), SD Port 3 //======================================================== BITCSET(pGPIO->GPFFN0, 0xFFFFFFFF, 0x22222222); // SD3_D0 ~ SD3_D7 BITCSET(pGPIO->GPFFN1, 0x000000FF, 0x00000022); // SD3_CLK, SD3_CMD BITCLR(pGPIO->GPAEN, Hw13); BITCLR(pGPIO->GPFEN, Hw11); BITCSET(pGPIO->GPAFN1, 0x00F00000, 0x00000000); // GPIO_A13 --> SD3_CD BITCSET(pGPIO->GPFFN1, 0x0000F000, 0x00000000); // GPIO_F11 --> SD3_WP BITCSET(pGPIO->GPFCD0, 0x000FFFFF, 0x000D5555); // SD3_CLK(GPIO_F9) Strength: 3, Others:1 #endif #if defined(FEATURE_TCC93_88_8910_DEMO_JM5_SLOT) //======================================================== // SD/MMC: JM5(GPIO_F18~23=SD1, GPIO_F13=CD), SD Port 1 //======================================================== BITCSET(pGPIO->GPFFN2, 0xFFFFFF00, 0x22222200); // SD1_D0 ~ SD1_D3, SD1_CLK, SD1_CMD BITCLR(pGPIO->GPFEN, Hw13|Hw12); BITCSET(pGPIO->GPFFN1, 0x00FF0000, 0x00000000); // GPIO_F13 --> SD1_CD, GPIO_F12 --> SD1_WP BITCSET(pGPIO->GPFCD1, 0x0000FFF0, 0x0000D550); // SD1_CLK(GPIO_F23) Strength: 3, Others:1 #endif //defined(FEATURE_TCC93_88_8910_DEMO_JM5_SLOT) #if defined(FEATURE_TCC93_88_8910_DEMO_JM2_SLOT) #if defined(TCC88XX_EMMC_BOOT) //===================================================== // SD/MMC: JM2(GPIO_F0~9=SD3, GPIO_F10=CD), SD Port 3 //===================================================== BITCSET(pGPIO->GPFFN0, 0xFFFFFFFF, 0x22222222); // SD3_D0 ~ SD3_D3 BITCSET(pGPIO->GPFFN1, 0x0000FFFF, 0x00000022); // SD3_CLK, SD3_CMD #if (HW_REV == 0x0614 || HW_REV == 0x0615 || HW_REV == 0x0621 || HW_REV == 0x0622 || HW_REV == 0x0623 || HW_REV == 0x0624) BITCLR(pGPIO->GPAEN, Hw13); BITCSET(pGPIO->GPAFN1, 0x00F00000, 0x00000000); // SD3_CD(GPIO_A13) #else BITCLR(pGPIO->GPFEN, Hw10); BITCSET(pGPIO->GPFFN1, 0x00000F00, 0x00000000); // SD3_CD(GPIO_F10) #endif BITSCLR(pGPIO->GPFEN, Hw10|Hw11, Hw10|Hw11); BITCSET(pGPIO->GPFCD0, 0x000FFFFF, 0x000D5555); // SD3_CLK(GPIOF9) Strength: 3, Others:1 #elif defined(TCC892X_EMMC_BOOT) //for TCC892x #if defined(BOARD_TCC892X_STB_DEMO) #if defined(TARGET_TCC8925_STB_DONGLE) //===================================================== // SD/MMC: JM2(GPIO_D15~20=SD0), SD Port 4 //===================================================== gpio_config(TCC_GPD(18) , GPIO_FN2); // SD0_D0 gpio_config(TCC_GPD(17) , GPIO_FN2); // SD0_D1 gpio_config(TCC_GPD(16) , GPIO_FN2); // SD0_D2 gpio_config(TCC_GPD(15) , GPIO_FN2); // SD0_D3 gpio_config(TCC_GPD(20) , GPIO_FN2); // SD0_CLK gpio_config(TCC_GPD(19) , GPIO_FN2); // SD0_CMD #else //===================================================== // SD/MMC: JM2(GPIO_D15~20=SD0), SD Port 4 //===================================================== gpio_config(TCC_GPF(19) , GPIO_FN2); // SD0_D0 gpio_config(TCC_GPF(20) , GPIO_FN2); // SD0_D1 gpio_config(TCC_GPF(21) , GPIO_FN2); // SD0_D2 gpio_config(TCC_GPF(22) , GPIO_FN2); // SD0_D3 gpio_config(TCC_GPF(17) , GPIO_FN2); // SD0_CLK gpio_config(TCC_GPF(18) , GPIO_FN2); // SD0_CMD #endif #else #if (HW_REV >= 0x1005) //||(HW_REV == 0x1006)||(HW_REV == 0x1007)||(HW_REV == 0x1008) #if (HW_REV == 0x1008) //======================================================== // SD_CARD0 Power ON (GPIO_C20) //======================================================== gpio_config(TCC_GPC(20) , GPIO_FN0); gpio_set(TCC_GPC(20) , 1); #endif //===================================================== // SD/MMC: JM2(GPIO_D11~20=SD0, GPIO_B14=CD), SD Port 4 //===================================================== gpio_config(TCC_GPD(18) , GPIO_FN2); // SD0_D0 gpio_config(TCC_GPD(17) , GPIO_FN2); // SD0_D1 gpio_config(TCC_GPD(16) , GPIO_FN2); // SD0_D2 gpio_config(TCC_GPD(15) , GPIO_FN2); // SD0_D3 gpio_config(TCC_GPD(14) , GPIO_FN2); // SD0_D4 gpio_config(TCC_GPD(13) , GPIO_FN2); // SD0_D5 gpio_config(TCC_GPD(12) , GPIO_FN2); // SD0_D6 gpio_config(TCC_GPD(11) , GPIO_FN2); // SD0_D7 gpio_config(TCC_GPD(20) , GPIO_FN2); // SD0_CLK gpio_config(TCC_GPD(19) , GPIO_FN2); // SD0_CMD #else //(HW_REV >= 0x1000)&&(HW_REV <= 0x1004) #if defined(TARGET_M805_892X_EVM) //===================================================== // SD/MMC: JM2(GPIO_D15~20=SD0), SD Port 4 //===================================================== gpio_config(TCC_GPD(18) , GPIO_FN2); // SD0_D0 gpio_config(TCC_GPD(17) , GPIO_FN2); // SD0_D1 gpio_config(TCC_GPD(16) , GPIO_FN2); // SD0_D2 gpio_config(TCC_GPD(15) , GPIO_FN2); // SD0_D3 gpio_config(TCC_GPD(20) , GPIO_FN2); // SD0_CLK gpio_config(TCC_GPD(19) , GPIO_FN2); // SD0_CMD #else //===================================================== // SD/MMC: JM2(GPIO_F17~26=SD1, GPIO_D12=CD), SD Port 5 //===================================================== gpio_config(TCC_GPF(19) , GPIO_FN2); // SD1_D0 gpio_config(TCC_GPF(20) , GPIO_FN2); // SD1_D1 gpio_config(TCC_GPF(21) , GPIO_FN2); // SD1_D2 gpio_config(TCC_GPF(22) , GPIO_FN2); // SD1_D3 gpio_config(TCC_GPF(23) , GPIO_FN2); // SD1_D4 gpio_config(TCC_GPF(24) , GPIO_FN2); // SD1_D5 gpio_config(TCC_GPF(25) , GPIO_FN2); // SD1_D6 gpio_config(TCC_GPF(26) , GPIO_FN2); // SD1_D7 gpio_config(TCC_GPF(17) , GPIO_FN2); // SD1_CLK gpio_config(TCC_GPF(18) , GPIO_FN2); // SD1_CMD #endif #endif #endif #endif #endif //#if defined(FEATURE_TCC93_88_8910_DEMO_JM2_SLOT) }
* * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <dev/keys.h> #include <dev/gpio_keypad.h> #include <platform/gpio.h> #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) static unsigned int tcc8920_col_gpios[] = { TCC_GPF(3), TCC_GPF(4), TCC_GPF(5) }; static unsigned int tcc8920_row_gpios[] = { TCC_GPF(6), TCC_GPF(7) }; #define KEYMAP_INDEX(row, col) ((row)*ARRAY_SIZE(tcc8920_col_gpios) + (col)) static const unsigned short tcc8920_keymap[] = { [KEYMAP_INDEX(0, 0)] = KEY_MENU, [KEYMAP_INDEX(0, 1)] = KEY_UP, [KEYMAP_INDEX(0, 2)] = KEY_HOME, [KEYMAP_INDEX(1, 0)] = KEY_F1, [KEYMAP_INDEX(1, 1)] = KEY_DOWN,
static int __init tcc_init_wm8524(void) { volatile PGPIO pGpio = (volatile PGPIO)tcc_p2v(HwGPIO_BASE); int ret; if( !(machine_is_tcc8800st() || machine_is_tcc9300st() || machine_is_tcc8920st()) ) { alsa_dbg("\n\n\n\n%s() do not execution....\n\n", __func__); return 0; } alsa_dbg("TCC Board probe [%s]\n", __FUNCTION__); #if defined(CONFIG_ARCH_TCC93XX) if(machine_is_tcc9300st()) { gpio_request(TCC_GPF(4), "AIF_MODE"); gpio_request(TCC_GPF(3), "MUTE_ANG"); gpio_request(TCC_GPF(2), "MUTE_CTL"); BITCLR(pGpio->GPFFN0, Hw20-Hw8); /* GPIOF[4:2]: AIFMode, MUTE_ANG, MUTE_CTL */ gpio_direction_output(TCC_GPF(4), 1); /* AIFMode: 0(24-bit LJ), 1(24bit I2S), Z(24bit RJ) */ gpio_direction_output(TCC_GPF(3), 0); /* MUT_ANG: h/w mute */ gpio_direction_output(TCC_GPF(2), 0); /* MUTE_CTL of WM8524 */ tcc_soc_card.name = "tcc9300st"; } #elif defined(CONFIG_ARCH_TCC88XX) if(machine_is_tcc8800st()) { gpio_request(TCC_GPD(20), "AIF_MODE"); gpio_request(TCC_GPD(19), "MUTE_ANG"); gpio_request(TCC_GPD(18), "MUTE_CTL"); BITCLR(pGpio->GPDFN2, Hw20-Hw8); /* GPIOD[20:18]: AIFMode, MUTE_ANG, MUTE_CTL */ gpio_direction_output(TCC_GPD(20), 1); /* AIFMode: 0(24-bit LJ), 1(24bit I2S), Z(24bit RJ) */ gpio_direction_output(TCC_GPD(19), 0); /* MUT_ANG: h/w mute */ gpio_direction_output(TCC_GPD(18), 0); /* MUTE_CTL of WM8524 */ tcc_soc_card.name = "tcc8800st"; } #elif defined(CONFIG_ARCH_TCC892X) if(machine_is_tcc8920st()) { gpio_request(TCC_GPF(24), "AIF_MODE"); gpio_request(TCC_GPB(7), "MUTE_ANG"); gpio_request(TCC_GPB(6), "MUTE_CTL"); //BITCLR(pGpio->GPFFN0, Hw20-Hw8); /* GPIOF[4:2]: AIFMode, MUTE_ANG, MUTE_CTL */ gpio_direction_output(TCC_GPF(24), 1); /* AIFMode: 0(24-bit LJ), 1(24bit I2S), Z(24bit RJ) */ gpio_direction_output(TCC_GPB(7), 0); /* MUT_ANG: h/w mute */ gpio_direction_output(TCC_GPB(6), 0); /* MUTE_CTL of WM8524 */ tcc_soc_card.name = "tcc8920st"; } #endif tca_tcc_initport(); tcc_snd_device = platform_device_alloc("soc-audio", -1); if (!tcc_snd_device) return -ENOMEM; platform_set_drvdata(tcc_snd_device, &tcc_soc_card); ret = platform_device_add(tcc_snd_device); if (ret) { printk(KERN_ERR "Unable to add platform device\n");\ platform_device_put(tcc_snd_device); } return ret; }
TCC_MMC_TYPE_SD, TCC_MMC_TYPE_MAX } tcc_mmc_type; #if defined(CONFIG_STB_BOARD_HDB892S) #define TFCD_EXT_INT EXTINT_GPIOD_12 #define TFCD_GPIO_PORT TCC_GPD(12) #define TFCD_SDMMC_PORT 5 #define TFCD_PERI_SDMMC PERI_SDMMC1 #define TFCD_RB_SDMMC RB_SDMMC1CONTROLLER #define TFCD_HwINT1_SD HwINT1_SD1 static struct mmc_port_config mmc_ports[] = { [TCC_MMC_TYPE_SD] = { .data0 = TCC_GPF(19), .data1 = TCC_GPF(20), .data2 = TCC_GPF(21), .data3 = TCC_GPF(22), .data4 = TCC_MMC_PORT_NULL, .data5 = TCC_MMC_PORT_NULL, .data6 = TCC_MMC_PORT_NULL, .data7 = TCC_MMC_PORT_NULL, .cmd = TCC_GPF(18), .clk = TCC_GPF(17), .func = GPIO_FN(2), .width = TCC_MMC_BUS_WIDTH_4, .cd = TFCD_GPIO_PORT, .pwr = TCC_MMC_PORT_NULL, },
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include <linux/platform_device.h> #include <linux/input.h> #include <linux/gpio_event.h> #include <asm/gpio.h> #include <asm/mach-types.h> #include "board-m803.h" static const struct gpio_event_direct_entry m803_gpio_keymap[] = { #if !defined(CONFIG_REGULATOR_AXP192_PEK) { GPIO_PWR_KEY, KEY_END }, #endif { TCC_GPF(2), KEY_MENU }, // menu { TCC_GPF(3), KEY_BACK }, // back { TCC_GPF(4), KEY_VOLUMEUP }, // home { TCC_GPF(5), KEY_VOLUMEDOWN }, // home { TCC_GPF(6), KEY_HOMEPAGE }, // home }; static struct gpio_event_input_info m803_gpio_key_input_info = { .info.func = gpio_event_input_func, .keymap = m803_gpio_keymap, .keymap_size = ARRAY_SIZE(m803_gpio_keymap), .poll_time.tv.nsec = 20 * NSEC_PER_MSEC, .debounce_time.tv.nsec = 20 * NSEC_PER_MSEC, .flags = 0 /*GPIOEDF_PRINT_KEYS*/, .type = EV_KEY, };
static void lcdc_io_init_component(unsigned char lcdc_num, unsigned char type) { unsigned int lcd_reg = 0; unsigned int width, height; stCOMPONENT_SPEC spec; stLTIMING ComponentTiming; stLCDCTR LcdCtrlParam; PVIOC_DISP pDISPBase; PVIOC_WMIX pWIXBase; PDDICONFIG pDDICfg = (PDDICONFIG)HwDDI_CONFIG_BASE; PNTSCPAL pTVE = (PNTSCPAL)HwNTSCPAL_BASE; PGPIO pGPIO = (PGPIO)HwGPIO_BASE; struct fbcon_config *fb_con; printf("%s, lcdc_num=%d, type=%d\n", __func__, lcdc_num, type); if(type >= LCDC_COMPONENT_MAX) type = defalut_component_resolution; #if defined(COMPONENT_CHIP_THS8200) #if defined(TARGET_BOARD_STB) /* THS8200 Power Control - GPIO_F16 */ gpio_set(TCC_GPF(16), 1); #else #endif #endif #ifndef DEFAULT_DISPLAY_OUTPUT_DUAL BITSET(pTVE->DACPD, HwTVEDACPD_PD_EN); #endif component_get_spec(type, &spec); LCDC_IO_Set(lcdc_num, spec.component_bus_width); fb_con = &fb_cfg; if(lcdc_num) { pDISPBase = (VIOC_DISP *)HwVIOC_DISP1; pWIXBase =(VIOC_WMIX *)HwVIOC_WMIX1; tca_ckc_setperi(PERI_LCD1, ENABLE, spec.component_clock*spec.component_divider); //VIOC_OUTCFG_SetOutConfig(VIOC_OUTCFG_MRGB, VIOC_OUTCFG_DISP1); } else { pDISPBase = (VIOC_DISP *)HwVIOC_DISP0; pWIXBase =(VIOC_WMIX *)HwVIOC_WMIX0; tca_ckc_setperi(PERI_LCD0, ENABLE, spec.component_clock*spec.component_divider); //VIOC_OUTCFG_SetOutConfig(VIOC_OUTCFG_MRGB, VIOC_OUTCFG_DISP0); } printf("LCDC0 clk:%d, LCDC1 clk:%d, PLL:%d, divide:%d\n", tca_ckc_getperi(PERI_LCD0), tca_ckc_getperi(PERI_LCD1), tca_ckc_getpll(PCDIRECTPLL0), spec.component_divider); width = spec.component_width; height = spec.component_height; lcdc_set_logo(lcdc_num, width, height, fb_con); ComponentTiming.lpw = spec.component_LPW; ComponentTiming.lpc = spec.component_LPC + 1; ComponentTiming.lswc = spec.component_LSWC + 1; ComponentTiming.lewc = spec.component_LEWC + 1; ComponentTiming.vdb = spec.component_VDB; ComponentTiming.vdf = spec.component_VDF; ComponentTiming.fpw = spec.component_FPW1; ComponentTiming.flc = spec.component_FLC1; ComponentTiming.fswc = spec.component_FSWC1; ComponentTiming.fewc = spec.component_FEWC1; ComponentTiming.fpw2 = spec.component_FPW2; ComponentTiming.flc2 = spec.component_FLC2; ComponentTiming.fswc2 = spec.component_FSWC2; ComponentTiming.fewc2 = spec.component_FEWC2; VIOC_DISP_SetTimingParam(pDISPBase, &ComponentTiming); memset(&LcdCtrlParam, NULL, sizeof(LcdCtrlParam)); switch(type) { case LCDC_COMPONENT_480I_NTSC: case LCDC_COMPONENT_576I_PAL: break; case LCDC_COMPONENT_720P: LcdCtrlParam.r2ymd = 3; LcdCtrlParam.ckg = 1; LcdCtrlParam.id= 0; LcdCtrlParam.iv = 1; LcdCtrlParam.ih = 1; LcdCtrlParam.ip = 0; LcdCtrlParam.pxdw = 12; LcdCtrlParam.ni = 1; break; case LCDC_COMPONENT_1080I: LcdCtrlParam.r2ymd = 3; LcdCtrlParam.ckg = 1; LcdCtrlParam.id= 1; LcdCtrlParam.iv = 1; LcdCtrlParam.ih = 0; LcdCtrlParam.ip = 1; LcdCtrlParam.pxdw = 12; LcdCtrlParam.ni = 0; LcdCtrlParam.tv = 1; break; default: break; } VIOC_DISP_SetControlConfigure(pDISPBase, &LcdCtrlParam); VIOC_DISP_SetSize(pDISPBase, width, height); VIOC_DISP_SetBGColor(pDISPBase, 0, 0 , 0); VIOC_WMIX_SetOverlayPriority(pWIXBase, 0); VIOC_WMIX_SetBGColor(pWIXBase, 0x00, 0x00, 0x00, 0xff); VIOC_WMIX_SetSize(pWIXBase, width, height); VIOC_WMIX_SetUpdate(pWIXBase); #if defined(TARGET_BOARD_STB) /* VE_FIELD: GPIO_E27 */ gpio_config(TCC_GPE(27), GPIO_FN0|GPIO_OUTPUT|GPIO_HIGH); #endif /* Enable Component Chip */ #if defined(COMPONENT_CHIP_CS4954) if(type == LCDC_COMPONENT_480I_NTSC) cs4954_enable(COMPONENT_MODE_NTSC_M); // NTSC_M else cs4954_enable(COMPONENT_MODE_PAL_B); // PAL_B #elif defined(COMPONENT_CHIP_THS8200) if(type == LCDC_COMPONENT_720P) ths8200_enable(COMPONENT_MODE_720P); // 720P else ths8200_enable(COMPONENT_MODE_1080I); // 1080I #endif VIOC_DISP_TurnOn(pDISPBase); }
static int tca_tsif_set_port(struct tcc_tsif_handle *h) { volatile unsigned long* TSIFPORT = (volatile unsigned long *)tcc_p2v(HwTSIF_TSCHS_BASE); int ret = 0; printk("%s : select port => %d, serial_mode => %d\n", __func__, h->gpio_port, h->serial_mode); switch (h->gpio_port) { case 0: tcc_gpio_config(TCC_GPD(8), GPIO_FN(2)|GPIO_SCHMITT_INPUT); //clk tcc_gpio_config(TCC_GPD(9), GPIO_FN(2)); //valid tcc_gpio_config(TCC_GPD(10), GPIO_FN(2)); //sync tcc_gpio_config(TCC_GPD(7), GPIO_FN(2)); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPD(6), GPIO_FN(2)); //d1 tcc_gpio_config(TCC_GPD(5), GPIO_FN(2)); //d2 tcc_gpio_config(TCC_GPD(4), GPIO_FN(2)); //d3 tcc_gpio_config(TCC_GPD(3), GPIO_FN(2)); //d4 tcc_gpio_config(TCC_GPD(2), GPIO_FN(2)); //d5 tcc_gpio_config(TCC_GPD(1), GPIO_FN(2)); //d6 tcc_gpio_config(TCC_GPD(0), GPIO_FN(2)); //d7 } break; case 1: tcc_gpio_config(TCC_GPB(0), GPIO_FN(7)|GPIO_SCHMITT_INPUT); //clk tcc_gpio_config(TCC_GPB(2), GPIO_FN(7)); //valid tcc_gpio_config(TCC_GPB(1), GPIO_FN(7)); //sync tcc_gpio_config(TCC_GPB(3), GPIO_FN(7)); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPB(4), GPIO_FN(7)); //d1 tcc_gpio_config(TCC_GPB(5), GPIO_FN(7)); //d2 tcc_gpio_config(TCC_GPB(6), GPIO_FN(7)); //d3 tcc_gpio_config(TCC_GPB(7), GPIO_FN(7)); //d4 tcc_gpio_config(TCC_GPB(8), GPIO_FN(7)); //d5 tcc_gpio_config(TCC_GPB(9), GPIO_FN(7)); //d6 tcc_gpio_config(TCC_GPB(10), GPIO_FN(7)); //d7 } break; case 2: tcc_gpio_config(TCC_GPB(28), GPIO_FN(7)|GPIO_SCHMITT_INPUT); //clk tcc_gpio_config(TCC_GPB(26), GPIO_FN(7)); //valid tcc_gpio_config(TCC_GPB(27), GPIO_FN(7)); //sync tcc_gpio_config(TCC_GPB(25), GPIO_FN(7)); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPB(24), GPIO_FN(7)); //d1 tcc_gpio_config(TCC_GPB(23), GPIO_FN(7)); //d2 tcc_gpio_config(TCC_GPB(22), GPIO_FN(7)); //d3 tcc_gpio_config(TCC_GPB(21), GPIO_FN(7)); //d4 tcc_gpio_config(TCC_GPB(20), GPIO_FN(7)); //d5 tcc_gpio_config(TCC_GPB(19), GPIO_FN(7)); //d6 tcc_gpio_config(TCC_GPB(18), GPIO_FN(7)); //d7 } break; case 3: tcc_gpio_config(TCC_GPC(26), GPIO_FN(3)|GPIO_SCHMITT_INPUT); //clk tcc_gpio_config(TCC_GPC(24), GPIO_FN(3)); //valid tcc_gpio_config(TCC_GPC(25), GPIO_FN(3)); //sync tcc_gpio_config(TCC_GPC(23), GPIO_FN(3)); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPC(22), GPIO_FN(3)); //d1 tcc_gpio_config(TCC_GPC(21), GPIO_FN(3)); //d2 tcc_gpio_config(TCC_GPC(20), GPIO_FN(3)); //d3 tcc_gpio_config(TCC_GPC(19), GPIO_FN(3)); //d4 tcc_gpio_config(TCC_GPC(18), GPIO_FN(3)); //d5 tcc_gpio_config(TCC_GPC(17), GPIO_FN(3)); //d6 tcc_gpio_config(TCC_GPC(16), GPIO_FN(3)); //d7 } break; case 4: tcc_gpio_config(TCC_GPE(26), GPIO_FN(4)|GPIO_SCHMITT_INPUT); //clk tcc_gpio_config(TCC_GPE(24), GPIO_FN(4)); //valid tcc_gpio_config(TCC_GPE(25), GPIO_FN(4)); //sync tcc_gpio_config(TCC_GPE(23), GPIO_FN(4)); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPE(22), GPIO_FN(4)); //d1 tcc_gpio_config(TCC_GPE(21), GPIO_FN(4)); //d2 tcc_gpio_config(TCC_GPE(20), GPIO_FN(4)); //d3 tcc_gpio_config(TCC_GPE(19), GPIO_FN(4)); //d4 tcc_gpio_config(TCC_GPE(18), GPIO_FN(4)); //d5 tcc_gpio_config(TCC_GPE(17), GPIO_FN(4)); //d6 tcc_gpio_config(TCC_GPE(16), GPIO_FN(4)); //d7 } break; case 5: tcc_gpio_config(TCC_GPF(0), GPIO_FN(2)|GPIO_SCHMITT_INPUT); //clk tcc_gpio_config(TCC_GPF(2), GPIO_FN(2)); //valid tcc_gpio_config(TCC_GPF(1), GPIO_FN(2)); //sync tcc_gpio_config(TCC_GPF(3), GPIO_FN(2)); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPF(4), GPIO_FN(2)); //d1 tcc_gpio_config(TCC_GPF(5), GPIO_FN(2)); //d2 tcc_gpio_config(TCC_GPF(6), GPIO_FN(2)); //d3 tcc_gpio_config(TCC_GPF(7), GPIO_FN(2)); //d4 tcc_gpio_config(TCC_GPF(8), GPIO_FN(2)); //d5 tcc_gpio_config(TCC_GPF(9), GPIO_FN(2)); //d6 tcc_gpio_config(TCC_GPF(10), GPIO_FN(2)); //d7 } break; default: printk("%s : select wrong port => %d\n", __func__, h->gpio_port); ret = -1; break; } if(ret != -1) { unsigned int direction = 1 << (24 + h->gpio_port); unsigned int channel = (h->id & 0x3) << (12 + (2 * h->gpio_port)); unsigned int port = (h->gpio_port & 0xf) << (4 * h->id); unsigned int clr = (0x3 << (12 + (2 * h->gpio_port))) | (0xf << (4 * h->id)); BITCLR(*TSIFPORT, 0xffffffff); BITCLR(*TSIFPORT, direction); //clk, sync, valid, data input direction select BITCSET(*TSIFPORT, clr, (channel | port)); //tsif channel & port number select } return ret; }
static void tcc_tsif_release_port(struct tcc_tsif_handle *h) { volatile unsigned long* TSIFPORT = (volatile unsigned long *)tcc_p2v(HwTSIF_TSCHS_BASE); switch (h->gpio_port) { case 0: tcc_gpio_config(TCC_GPD(8), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //clk tcc_gpio_config(TCC_GPD(9), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //valid tcc_gpio_config(TCC_GPD(10), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //sync tcc_gpio_config(TCC_GPD(0), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPD(1), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d1 tcc_gpio_config(TCC_GPD(2), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d2 tcc_gpio_config(TCC_GPD(3), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d3 tcc_gpio_config(TCC_GPD(4), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d4 tcc_gpio_config(TCC_GPD(5), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d5 tcc_gpio_config(TCC_GPD(6), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d6 tcc_gpio_config(TCC_GPD(7), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d7 } break; case 1: tcc_gpio_config(TCC_GPB(0), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //clk tcc_gpio_config(TCC_GPB(2), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //valid tcc_gpio_config(TCC_GPB(1), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //sync tcc_gpio_config(TCC_GPB(3), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPB(4), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d1 tcc_gpio_config(TCC_GPB(5), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d2 tcc_gpio_config(TCC_GPB(6), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d3 tcc_gpio_config(TCC_GPB(7), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d4 tcc_gpio_config(TCC_GPB(8), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d5 tcc_gpio_config(TCC_GPB(9), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d6 tcc_gpio_config(TCC_GPB(10), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d7 } break; case 2: tcc_gpio_config(TCC_GPB(28), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //clk tcc_gpio_config(TCC_GPB(26), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //valid tcc_gpio_config(TCC_GPB(27), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //sync tcc_gpio_config(TCC_GPB(25), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPB(24), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d1 tcc_gpio_config(TCC_GPB(23), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d2 tcc_gpio_config(TCC_GPB(22), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d3 tcc_gpio_config(TCC_GPB(21), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d4 tcc_gpio_config(TCC_GPB(20), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d5 tcc_gpio_config(TCC_GPB(19), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d6 tcc_gpio_config(TCC_GPB(18), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d7 } break; case 3: tcc_gpio_config(TCC_GPC(26), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //clk tcc_gpio_config(TCC_GPC(24), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //valid tcc_gpio_config(TCC_GPC(25), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //sync tcc_gpio_config(TCC_GPC(23), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPC(22), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d1 tcc_gpio_config(TCC_GPC(21), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d2 tcc_gpio_config(TCC_GPC(20), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d3 tcc_gpio_config(TCC_GPC(19), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d4 tcc_gpio_config(TCC_GPC(18), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d5 tcc_gpio_config(TCC_GPC(17), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d6 tcc_gpio_config(TCC_GPC(16), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d7 } break; case 4: tcc_gpio_config(TCC_GPE(26), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //clk tcc_gpio_config(TCC_GPE(24), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //valid tcc_gpio_config(TCC_GPE(25), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //sync tcc_gpio_config(TCC_GPE(23), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPE(22), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d1 tcc_gpio_config(TCC_GPE(21), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d2 tcc_gpio_config(TCC_GPE(20), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d3 tcc_gpio_config(TCC_GPE(19), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d4 tcc_gpio_config(TCC_GPE(18), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d5 tcc_gpio_config(TCC_GPE(17), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d6 tcc_gpio_config(TCC_GPE(16), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d7 } break; case 5: tcc_gpio_config(TCC_GPF(0), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //clk tcc_gpio_config(TCC_GPF(2), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //valid tcc_gpio_config(TCC_GPF(1), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //sync tcc_gpio_config(TCC_GPF(3), GPIO_FN(0)|GPIO_OUTPUT|GPIO_LOW); //d0 if(!(h->serial_mode)) { tcc_gpio_config(TCC_GPF(4), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d1 tcc_gpio_config(TCC_GPF(5), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d2 tcc_gpio_config(TCC_GPF(6), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d3 tcc_gpio_config(TCC_GPF(7), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d4 tcc_gpio_config(TCC_GPF(8), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d5 tcc_gpio_config(TCC_GPF(9), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d6 tcc_gpio_config(TCC_GPF(10), GPIO_FN(2)|GPIO_OUTPUT|GPIO_LOW); //d7 } break; default: printk("%s : select wrong port => %d\n", __func__, h->gpio_port); break; } { unsigned int clr = (0x3 << (12 + (2 * h->gpio_port))) | (0xf << (4 * h->id)); BITCLR(*TSIFPORT, clr); } }
static int __init tcc_init_es8388(void) { int ret; printk("%s() \n", __func__); if( !(machine_is_m801_88() || machine_is_m805_892x() || machine_is_tcc8920()) ) { alsa_dbg("\n\n\n\n%s() do not execution....\n\n", __func__); return 0; } #if defined(CONFIG_ARCH_TCC88XX) alsa_dbg("TCC Board probe [%s]\n", __FUNCTION__); /* h/w mute control */ if(machine_is_m801_88()) { tcc_gpio_config(TCC_GPG(6), GPIO_FN(0)); tcc_gpio_config(TCC_GPD(11), GPIO_FN(0)); gpio_request(TCC_GPG(6), "SPK_MUTE_CTL"); gpio_request(TCC_GPD(11), "HP_MUTE_CTL"); gpio_direction_output(TCC_GPG(6), 0); // Speaker mute gpio_direction_output(TCC_GPD(11), 1); // HeadPhone mute tcc_hp_hw_mute(false); tcc_spk_hw_mute(false); tcc_soc_card.name = "M801"; } #elif defined(CONFIG_ARCH_TCC892X) alsa_dbg("TCC Board probe [%s]\n", __FUNCTION__); /* h/w mute control */ if(machine_is_m805_892x()) { if(system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005) { tcc_gpio_config(TCC_GPE(18), GPIO_FN(0)); gpio_request(TCC_GPE(18), "SPK_MUTE_CTL"); gpio_direction_output(TCC_GPE(18), 0); // Speaker mute tcc_gpio_config(TCC_GPE(17), GPIO_FN(0)); gpio_request(TCC_GPE(17), "HP_MUTE_CTL"); gpio_direction_output(TCC_GPE(17), 1); // HeadPhone mute } else { #if defined(CONFIG_M805S_8923_0XA) tcc_gpio_config(TCC_GPG(11), GPIO_FN(0)); gpio_request(TCC_GPG(11), "SPK_MUTE_CTL"); gpio_direction_output(TCC_GPG(11), 0); // Speaker mute #else tcc_gpio_config(TCC_GPF(27), GPIO_FN(0)); gpio_request(TCC_GPF(27), "SPK_MUTE_CTL"); gpio_direction_output(TCC_GPF(27), 0); // Speaker mute #endif tcc_gpio_config(TCC_GPG(5), GPIO_FN(0)); gpio_request(TCC_GPG(5), "HP_MUTE_CTL"); gpio_direction_output(TCC_GPG(5), 1); // HeadPhone mute } tcc_hp_hw_mute(false); tcc_spk_hw_mute(false); tcc_soc_card.name = "M805"; } #else alsa_dbg("TCC Board probe [%s]\n [Error] Don't support architecture..\n", __FUNCTION__); return 0; #endif tcc_hp_hw_mute(true); tcc_spk_hw_mute(true); tca_tcc_initport(); ret = es8388_i2c_register(); tcc_snd_device = platform_device_alloc("soc-audio", -1); if (!tcc_snd_device) return -ENOMEM; platform_set_drvdata(tcc_snd_device, &tcc_soc_card); ret = platform_device_add(tcc_snd_device); if (ret) { printk(KERN_ERR "Unable to add platform device\n");\ platform_device_put(tcc_snd_device); } return ret; }
#include "devices.h" #include "board-tcc8800st.h" #if defined(CONFIG_MMC_TCC_SDHC) typedef enum { TCC_MMC_TYPE_SD, #if defined(CONFIG_MMC_TCC_PORT7) TCC_MMC_TYPE_WIFI, #endif TCC_MMC_TYPE_MAX } tcc_mmc_type; static struct mmc_port_config mmc_ports[] = { [0] = { .data0 = TCC_GPF(18), .data1 = TCC_GPF(19), .data2 = TCC_GPF(20), .data3 = TCC_GPF(21), .data4 = 0, .data5 = 0, .data6 = 0, .data7 = 0, .cmd = TCC_GPF(22), .clk = TCC_GPF(23), .cd = TCC_GPF(13), .pwr = 0, }, #if defined(CONFIG_MMC_TCC_PORT7) [1] = {
unsigned IO_TCO_GetGpioFunc(unsigned uCH, unsigned uGPIO) { #ifdef TCC892X switch(uGPIO) { case TCC_GPB(9): // TCO0 case TCC_GPB(10): // TCO1 case TCC_GPB(11): // TCO2 case TCC_GPB(12): // TCO3 case TCC_GPB(13): // TCO4 case TCC_GPB(14): // TCO5 return GPIO_FN12; case TCC_GPC(0): // TCO0 case TCC_GPC(1): // TCO1 case TCC_GPC(2): // TCO2 case TCC_GPC(3): // TCO3 case TCC_GPC(4): // TCO4 case TCC_GPC(5): // TCO5 return GPIO_FN9; case TCC_GPD(9): // TCO0 case TCC_GPD(10): // TCO1 case TCC_GPD(11): // TCO2 case TCC_GPD(12): // TCO3 case TCC_GPD(13): // TCO4 case TCC_GPD(14): // TCO5 return GPIO_FN9; case TCC_GPE(12): // TCO0 case TCC_GPE(13): // TCO1 case TCC_GPE(14): // TCO2 case TCC_GPE(15): // TCO3 case TCC_GPE(16): // TCO4 case TCC_GPE(17): // TCO5 return GPIO_FN7; case TCC_GPF(16): // TCO0 case TCC_GPF(17): // TCO1 case TCC_GPF(18): // TCO2 case TCC_GPF(19): // TCO3 case TCC_GPF(20): // TCO4 case TCC_GPF(21): // TCO5 return GPIO_FN11; case TCC_GPG(5): // TCO0 case TCC_GPG(6): // TCO1 case TCC_GPG(7): // TCO2 case TCC_GPG(8): // TCO3 case TCC_GPG(9): // TCO4 case TCC_GPG(10): // TCO5 return GPIO_FN7; default: break; } #elif defined(TCC88XX) switch(uGPIO) { case TCC_GPA(4): // TCO0 case TCC_GPB(5): // TCO1 case TCC_GPB(6): // TCO2 case TCC_GPB(7): // TCO3 case TCC_GPB(14): // TCO4 case TCC_GPB(15): // TCO5 return GPIO_FN2; default: break; } #else #error code : not define TCO gpio functional setting at chipset #endif// return 0; }
/***************************************************************************** * Function Name : tca_i2c_setgpio(int ch) * Description: I2C port configuration * input parameter: * int core; // I2C Core * int ch; // I2C master channel ******************************************************************************/ void tca_i2c_setgpio(int core, int ch) { //PI2CPORTCFG i2c_portcfg = (PI2CPORTCFG)tcc_p2v(HwI2C_PORTCFG_BASE); switch (core) { case 0: #if defined(CONFIG_MACH_TCC8920ST) #if defined(CONFIG_STB_BOARD_DONGLE) //I2C[16] - GPIOE[14][15] //i2c_portcfg->PCFG0.bREG.MASTER0 = 16; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 16); tcc_gpio_config(TCC_GPE(14), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPE(15), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW); #elif defined(CONFIG_STB_BOARD_HDB892F) #if defined(CONFIG_HDB892F_BOARD_YJ8925T) #else //I2C[16] - GPIOE[14][15] //i2c_portcfg->PCFG0.bREG.MASTER0 = 16; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 16); tcc_gpio_config(TCC_GPE(14), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPE(15), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW); #endif #elif defined(CONFIG_STB_BOARD_ISDBT_MODULE) //I2C[22] - GPIOG[2][3] //i2c_portcfg->PCFG0.bREG.MASTER0 = 22; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 22); tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); #elif defined(CONFIG_STB_BOARD_UPC) #else //I2C[26] - GPIOG[18][19] //i2c_portcfg->PCFG0.bREG.MASTER0 = 26; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 26); tcc_gpio_config(TCC_GPG(18), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(19), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); #endif #elif defined(CONFIG_MACH_M805_892X) if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005 || system_rev == 0x2006 || system_rev == 0x2007 || system_rev == 0x2008) { //I2C[12] - GPIOC[2][3] //i2c_portcfg->PCFG0.bREG.MASTER0 = 12; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 12); tcc_gpio_config(TCC_GPC(2), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPC(3), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW); } else { #if defined(CONFIG_M805S_8923_0XA) //I2C[22] - GPIOG[2][3] //i2c_portcfg->PCFG0.bREG.MASTER0 = 22; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 22); tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); #else //I2C[23] - GPIOG[6][7] //i2c_portcfg->PCFG0.bREG.MASTER0 = 23; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 23); tcc_gpio_config(TCC_GPG(6), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(7), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); #endif } #else if(system_rev == 0x1006) { //I2C[18] - GPIOF[13][14] //((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER0 = 18; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 18); tcc_gpio_config(TCC_GPF(13), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPF(14), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); } else if(system_rev == 0x1008) { //I2C[22] - GPIOG[2][3] //((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER0 = 22; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 22); tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); } else { //I2C[8] - GPIOB[9][10] //i2c_portcfg->PCFG0.bREG.MASTER0 = 8; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x000000FF, 8); tcc_gpio_config(TCC_GPB(9), GPIO_FN11|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPB(10), GPIO_FN11|GPIO_OUTPUT|GPIO_LOW); } #endif break; case 1: #if defined(CONFIG_MACH_M805_892X) if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005 || system_rev == 0x2006 || system_rev == 0x2007 || system_rev == 0x2008) { //I2C[25] - GPIOG[12][13] //i2c_portcfg->PCFG0.bREG.MASTER1 = 25; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 25<<8); tcc_gpio_config(TCC_GPG(12), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(13), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); } else { #if defined(CONFIG_M805S_8923_0XA) //I2C[21] - GPIOF[27][28] //i2c_portcfg->PCFG0.bREG.MASTER1 = 21; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 21<<8); tcc_gpio_config(TCC_GPF(27), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPF(28), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); #else //I2C[24] - GPIOG[10][11] //i2c_portcfg->PCFG0.bREG.MASTER1 = 24; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 24<<8); tcc_gpio_config(TCC_GPG(10), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(11), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); #endif } #else if(system_rev == 0x1005 || system_rev == 0x1007) { //I2C[21] - GPIOF[27][28] //i2c_portcfg->PCFG0.bREG.MASTER1 = 21; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 21<<8); tcc_gpio_config(TCC_GPF(27), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPF(28), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); } else if(system_rev == 0x1006) { //I2C[28] - GPIO_ADC[2][3] //((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER1 = 28; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 28<<8); tcc_gpio_config(TCC_GPADC(2), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPADC(3), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW); } else if(system_rev == 0x1008) { //I2C[13] - GPIOC[12][13] //((PI2CPORTCFG)HwI2C_PORTCFG_BASE)->PCFG0.bREG.MASTER1 = 13; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 13<<8); tcc_gpio_config(TCC_GPC(12), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPC(13), GPIO_FN7|GPIO_OUTPUT|GPIO_LOW); } else { #if defined(CONFIG_STB_BOARD_HDB892F) && defined(CONFIG_HDB892F_BOARD_YJ8925T) //I2C[16] - GPIOE[14][15] //i2c_portcfg->PCFG0.bREG.MASTER1 = 16; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 16<<8); tcc_gpio_config(TCC_GPE(14), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPE(15), GPIO_FN6|GPIO_OUTPUT|GPIO_LOW); #elif defined(CONFIG_STB_BOARD_UPC) #else //I2C[22] - GPIOG[2][3] //i2c_portcfg->PCFG0.bREG.MASTER1 = 22; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x0000FF00, 22<<8); tcc_gpio_config(TCC_GPG(2), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPG(3), GPIO_FN4|GPIO_OUTPUT|GPIO_LOW); #endif } #endif break; case 2: #if defined(CONFIG_MACH_M805_892X) if (system_rev == 0x2002 || system_rev == 0x2003 || system_rev == 0x2004 || system_rev == 0x2005 || system_rev == 0x2006 || system_rev == 0x2007 || system_rev == 0x2008) { //I2C[18] - GPIOF[13][14] //i2c_portcfg->PCFG0.bREG.MASTER1 = 18; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x00FF0000, 18<<16); tcc_gpio_config(TCC_GPF(13), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPF(14), GPIO_FN10|GPIO_OUTPUT|GPIO_LOW); } #else if(system_rev != 0x1006 && system_rev != 0x1008) { //I2C[28] - GPIO_ADC[2][3] //i2c_portcfg->PCFG0.bREG.MASTER2 = 28; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0x00FF0000, 28<<16); tcc_gpio_config(TCC_GPADC(2), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPADC(3), GPIO_FN3|GPIO_OUTPUT|GPIO_LOW); } #endif break; case 3: //I2C[27] - GPIO_HDMI[2][3] //i2c_portcfg->PCFG0.bREG.MASTER3 = 27; BITCSET(((PI2CPORTCFG)io_p2v(HwI2C_PORTCFG_BASE))->PCFG0.nREG, 0xFF000000, 27<<24); tcc_gpio_config(TCC_GPHDMI(2), GPIO_FN1|GPIO_OUTPUT|GPIO_LOW); tcc_gpio_config(TCC_GPHDMI(3), GPIO_FN1|GPIO_OUTPUT|GPIO_LOW); //Not used.. break; default: break; } }
static int tcc_msensor_open(struct inode *inode, struct file *filp) { int ret; unsigned char old_ctrl; // int num = MINOR(inode->i_rdev); msensor_dbg("tcc_msensor_open\n"); // msensor_dbg(KERN_INFO "%s -> minor : %d, (cnt:%d) \n", __FUNCTION__, num, msensor_used_count+1); if (msensor_used_count == 0) { if(machine_is_m801_88()) { // M801_88 board gpio_request(TCC_GPF(8), NULL); tcc_gpio_config(TCC_GPF(8), GPIO_FN(0)); gpio_direction_input(TCC_GPF(8)); } #ifdef CONFIG_I2C // Initialize I2C driver for AK8975C ret = i2c_add_driver(&msensor_i2c_driver); if(ret < 0) { msensor_dbg("%s() [Error] failed i2c_add_driver() = %d\n", __func__, ret); return ret; } ret = ak8975c_i2c_register(); if(ret < 0) { msensor_dbg("%s() [Error] Failed register i2c client driver for ak8975c, return is %d\n", __func__, ret); return ret; } #endif old_ctrl = MSENSOR_READ_DAT(0x00); if (old_ctrl == 0xFF) { msensor_dbg("%s: No such device or address\n", __func__); #ifdef CONFIG_I2C i2c_unregister_device(msensor_i2c_client); i2c_del_driver(&msensor_i2c_driver); msensor_i2c_client = NULL; #endif return -ENXIO; } msensor_dbg("%s: identification : %x\n", __func__, old_ctrl); old_ctrl = MSENSOR_READ_DAT(0x01); msensor_dbg("%s: ASIC revition ID : %x\n", __func__, old_ctrl); msensor_timer= kmalloc( sizeof( struct timer_list ), GFP_KERNEL ); if (msensor_timer == NULL) { msensor_dbg("%s: mem alloc fail\n", __func__); #ifdef CONFIG_I2C i2c_unregister_device(msensor_i2c_client); i2c_del_driver(&msensor_i2c_driver); msensor_i2c_client = NULL; #endif return -ENOMEM; } memset(msensor_timer, 0, sizeof(struct timer_list)); msensor_dbg("%s: msensor_duration = %d\n", __func__, msensor_duration); msensor_timer_registertimer( msensor_timer, msensor_duration ); } msensor_used_count++; return 0; }