/******************************************************* * Routine: misc_init_r * Description: Init ethernet (done here so udelay works) ********************************************************/ int misc_init_r(void) { #ifdef CONFIG_DRIVER_OMAP34XX_I2C unsigned char data; i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE); twl4030_power_reset_init(); /* see if we need to activate the power button startup */ char *s = getenv("pbboot"); if (s) { /* figure out why we have booted */ i2c_read(0x4b, 0x3a, 1, &data, 1); /* if status is non-zero, we didn't transition * from WAIT_ON state */ if (data) { printf("Transitioning to Wait State (%x)\n", data); /* clear status */ data = 0; i2c_write(0x4b, 0x3a, 1, &data, 1); /* put PM into WAIT_ON state */ data = 0x01; i2c_write(0x4b, 0x46, 1, &data, 1); /* no return - wait for power shutdown */ while (1) {;} } printf("Transitioning to Active State (%x)\n", data); /* turn on long pwr button press reset*/ data = 0x40; i2c_write(0x4b, 0x46, 1, &data, 1); printf("Power Button Active\n"); } #endif //&*&*&*20101201_Peter ++ twl4030_usb_init(); twl4030_keypad_init(); twl4030_madc_init(); twl4030_vadc_onoff(1); //&*&*&*20101201_Peter -- dieid_num_r(); return (0); }
/* * Routine: misc_init_r * Description: Configure board specific parts */ int misc_init_r(void) { int err; hw_boot_status status_bits; unsigned short reg; unsigned char val; u8 data; /* * Configure drive strength for IO cells */ // already pulled up on board //*(ulong *)(CONTROL_PROG_IO1) &= ~(PRG_I2C2_PULLUPRESX); _board_revision(); printf("%s: initialize TPS65950 voltages\n", __func__); twl4030_power_init(); printf("%s: select TPS65950 power-on HW transitions(PWRON and RTC)\n", __func__); twl4030_set_px_transition(0x07, 0x49); printf("%s: select 1-GHz MPU clock\n", __func__); // 26 MHz * 500 / (12 + 1) select_mpu_clock(500, 12); lcd_config(); printf("%s: initialize all peripherals\n", __func__); omap_request_gpio(27); // Enable periph 3V omap_request_gpio(34); // reset USBHUB omap_request_gpio(38); // disable CAN omap_request_gpio(40); // reset modem omap_request_gpio(41); // disable modem omap_request_gpio(42); // reset CAP touch omap_request_gpio(43); // off CAN omap_request_gpio(61); // off modem omap_request_gpio(64); // off GPS omap_request_gpio(65); // off USB PHY omap_request_gpio(94); // automotive out high omap_request_gpio(95); // Wireless module VIO 1.8 V omap_request_gpio(98); // DEVICE_EN omap_request_gpio(111); // off USB PHY omap_request_gpio(136); // Wireless module VDD 3.6 V omap_request_gpio(137); // BT_EN omap_request_gpio(138); // WL_EN omap_request_gpio(144); // disable GPS omap_request_gpio(145); // reset GPS omap_request_gpio(146); // disable GPS boot omap_request_gpio(161); // select microphone omap_request_gpio(162); // serial transmitter force on omap_request_gpio(175); // shutdown internal speaker amplifier omap_request_gpio(176); // shutdown external speaker amplifier omap_request_gpio(177); // enable external I2C device omap_request_gpio(186); // PWR_ON generator // Enable serial ports transceiver omap_set_gpio_dataout(162, 1); omap_set_gpio_direction(162, 0); omap_set_gpio_dataout(98, 0); omap_set_gpio_direction(98, 0); omap_set_gpio_dataout(94, 0); omap_set_gpio_direction(94, 0); // enable peripheral 3.3 V omap_set_gpio_dataout(27, 1); omap_set_gpio_direction(27, 0); // PWR_ON generator will off omap_set_gpio_dataout(186, 1); omap_set_gpio_direction(186, 0); // disable BT omap_set_gpio_dataout(137, 0); omap_set_gpio_direction(137, 0); // disable WL omap_set_gpio_dataout(138, 0); omap_set_gpio_direction(138, 0); // wireless VIO 1.8V off omap_set_gpio_dataout(95, 0); omap_set_gpio_direction(95, 0); // remove wireless VDD 3.6 V omap_set_gpio_dataout(136, 0); omap_set_gpio_direction(136, 0); udelay(100000); // Supply VDD and VIO to WiFi omap_set_gpio_dataout(136, 1); omap_set_gpio_dataout(95, 1); udelay(100000); // enable digital PADs // MMC2 MUX_VAL(CP(MMC2_CLK), (IEN | PTU | EN | M0)) MUX_VAL(CP(MMC2_CMD), (IEN | PTU | EN | M0)) MUX_VAL(CP(MMC2_DAT0), (IEN | PTU | EN | M0)) MUX_VAL(CP(MMC2_DAT1), (IEN | PTU | EN | M0)) MUX_VAL(CP(MMC2_DAT2), (IEN | PTU | EN | M0)) MUX_VAL(CP(MMC2_DAT3), (IEN | PTU | EN | M0)) // UART2 MUX_VAL(CP(MCBSP3_FSX), (IEN | PTD | DIS | M1)) MUX_VAL(CP(MCBSP3_CLKX),(IDIS | PTD | DIS | M1)) MUX_VAL(CP(MCBSP3_DR), (IDIS | PTD | DIS | M1)) MUX_VAL(CP(MCBSP3_DX), (IEN | PTD | DIS | M1)) udelay(200000); // pulse enable pins // enable WL omap_set_gpio_dataout(138, 1); // enable BT omap_set_gpio_dataout(137, 1); udelay(200000); // Valdimir: temporary enabled // disable BT //omap_set_gpio_dataout(137, 0); // disable WL //omap_set_gpio_dataout(138, 0); omap_set_gpio_dataout(41, 0); omap_set_gpio_direction(41, 0); omap_set_gpio_dataout(40, 0); omap_set_gpio_direction(40, 0); omap_set_gpio_dataout(61, 0); omap_set_gpio_direction(61, 0); omap_set_gpio_dataout(144, 0); omap_set_gpio_direction(144, 0); omap_set_gpio_dataout(145, 0); omap_set_gpio_direction(145, 0); omap_set_gpio_dataout(146, 0); omap_set_gpio_direction(146, 0); omap_set_gpio_dataout(64, 0); omap_set_gpio_direction(64, 0); omap_set_gpio_dataout(38, 0); omap_set_gpio_direction(38, 0); omap_set_gpio_dataout(43, 0); omap_set_gpio_direction(43, 0); omap_set_gpio_dataout(42, 0); omap_set_gpio_direction(42, 0); omap_set_gpio_dataout(34, 0); omap_set_gpio_direction(34, 0); omap_set_gpio_dataout(111, 1); omap_set_gpio_direction(111, 0); omap_set_gpio_dataout(65, 0); omap_set_gpio_direction(65, 0); // enable internal speaker amplifier omap_set_gpio_dataout(175, 0); omap_set_gpio_direction(175, 0); // shutdown external speaker amplifier omap_set_gpio_dataout(176, 0); omap_set_gpio_direction(176, 0); // select internal microphone omap_set_gpio_dataout(161, 0); omap_set_gpio_direction(161, 0); // External I2C Bus enable omap_set_gpio_dataout(177, 0); omap_set_gpio_direction(177, 0); omap_free_gpio(27); omap_free_gpio(34); omap_free_gpio(38); omap_free_gpio(40); omap_free_gpio(41); omap_free_gpio(42); omap_free_gpio(43); omap_free_gpio(61); omap_free_gpio(64); omap_free_gpio(65); omap_free_gpio(94); omap_free_gpio(95); omap_free_gpio(98); omap_free_gpio(111); omap_free_gpio(136); omap_free_gpio(137); omap_free_gpio(138); omap_free_gpio(144); omap_free_gpio(145); omap_free_gpio(146); omap_free_gpio(161); omap_free_gpio(162); omap_free_gpio(175); omap_free_gpio(177); omap_free_gpio(186); printf("%s: initialize all peripherals done\n", __func__); twl4030_keypad_init(); // TODO: thermal shutdown and dynamic frequency scaling // TPS659XX PHY 3.3 V recovery workaround // Status bits read from companion chip and OMAP twl4030_i2c_read_u8(TWL4030_CHIP_RTC, &data, TWL_BACKUP_REG_G); //TWL_BACKUP_REG_G - set in thermal driver status_bits.thermal = data; twl4030_i2c_read_u8(TWL4030_CHIP_RTC, &data, TWL_RTC_STATUS_REG); //TWL_RTC_STATUS_REG status_bits.rtc_power_up = (data & TWL_RTC_STATUS_POWER_UP) ? 1 : 0; status_bits.rtc_alarm = (data & TWL_RTC_STATUS_ALARM) ? 1 : 0; status_bits.rtc_event = (data & (TWL_RTC_STATUS_ONE_D_EVENT | TWL_RTC_STATUS_ONE_H_EVENT | TWL_RTC_STATUS_ONE_M_EVENT | TWL_RTC_STATUS_ONE_S_EVENT))? 1 : 0; twl4030_i2c_read_u8(TWL4030_CHIP_RTC, &data, TWL_RTC_INTERRUPTS_REG); //TWL_RTC_INTERRUPTS_REG status_bits.rtc_it_timer = (data & TWL_RTC_INTERRUPTS_IT_TIMER) ? 1 : 0; status_bits.rtc_it_alarm = (data & TWL_RTC_INTERRUPTS_IT_ALARM) ? 1 : 0; twl4030_i2c_read_u8(TWL4030_CHIP_RTC, &data, TWL_STS_BOOT); //TWL_STS_BOOT status_bits.watchdog_reset = (data & (1<<5)) ? 1 : 0;//TWL_WATCHDOG_RESET twl4030_i2c_read_u8(TWL4030_CHIP_RTC, &data, TWL_STS_HW_CONDITIONS); //TWL_STS_HW_CONDITIONS status_bits.sts_pwon = (data & 1) ? 1 : 0; //STS_PWON status_bits.sts_warmreset = (data & (1<<3)) ? 1 : 0; //STS_WARMRESET twl4030_i2c_read_u8(TWL4030_CHIP_RTC, &data, TWL_PWR_ISR1); //TWL_PWR_ISR1 status_bits.isr_pwron = (data & STARTON_RTC) ? 1 : 0; status_bits.isr_rtc_it = (data & STARTON_PWON) ? 1 : 0; status_bits.prm_rstst = readl(OMAP_PRCM_PRM_RSTST); char str[9]; sprintf(str, "%d", status_bits.bits); setenv("hw_stat", str); printf("Status bits [0x%x] [%s]\n", status_bits.bits, str); printf("Board Revision A317 (%d)\n", board_revision); sprintf(str, "%s", "A-317"); setenv("product", str); dieid_num_r(); return 0; }