static int __init mxc_init_uart(void) { if (cpu_is_mx53() || cpu_is_mx50()) { mxc_uart_resources1[0].start -= 0x20000000; mxc_uart_resources1[0].end -= 0x20000000; mxc_uart_resources2[0].start -= 0x20000000; mxc_uart_resources2[0].end -= 0x20000000; mxc_uart_resources3[0].start -= 0x20000000; mxc_uart_resources3[0].end -= 0x20000000; mxc_uart_resources4[0].start -= 0x20000000; mxc_uart_resources4[0].end -= 0x20000000; mxc_uart_resources5[0].start -= 0x20000000; mxc_uart_resources5[0].end -= 0x20000000; } /* Register all the MXC UART platform device structures */ /* For Tequila, register only uart1, this will help PM */ platform_device_register(&mxc_uart_device1); if (!mx50_board_is(BOARD_ID_TEQUILA)) { platform_device_register(&mxc_uart_device2); platform_device_register(&mxc_uart_device3); platform_device_register(&mxc_uart_device4); if (cpu_is_mx53()) { platform_device_register(&mxc_uart_device5); } } return 0; }
static void fiveway_set_gpio_pads(iomux_pin_name_t gpio) { unsigned int FIVEWAY_pad_enable = PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_PULL | PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_DRV_HIGH; if (mx50_board_is(BOARD_ID_TEQUILA)) FIVEWAY_pad_enable |= PAD_CTL_100K_PD; mxc_iomux_set_pad(gpio, FIVEWAY_pad_enable); }
static void fslepdc_set_orientation(void) { // The displays for Whitney and Tequila are mounted upside down from Finkle. It // doesn't really matter on Yoshi, so we'll set it to Finkle's orientation. // Any devices that we don't know about yet will just be considered to be in // the default, upright orientation. // if ( mx50_board_is(BOARD_ID_YOSHI) || mx50_board_is(BOARD_ID_FINKLE) ) { fslepdc_orientation = fslepdc_orientation_ud; fslepdc_rotate = fslepdc_rotate_ud; einkfb_debug("orientation is upside down\n"); } else { fslepdc_orientation = fslepdc_orientation_ur; fslepdc_rotate = fslepdc_rotate_ur; einkfb_debug("orientation is upright\n"); } }
bool fiveway_datain(int line_direction) { iomux_pin_name_t gpio; int err = -1; switch (line_direction) { case 0: gpio = FIVEWAY_up_gpio; break; case 1: gpio = FIVEWAY_down_gpio; break; case 2: gpio = FIVEWAY_left_gpio; break; case 3: gpio = FIVEWAY_right_gpio; break; case 4: gpio = FIVEWAY_select_gpio; break; default: return err; } if (mx50_board_is(BOARD_ID_TEQUILA)) return !gpio_get_value(IOMUX_TO_GPIO(gpio)); }
int gpio_keypad_inactive(void) { if (mx50_board_is(BOARD_ID_TEQUILA)) return 0; }
void __init mx50_yoshime_io_init(void) { int i; for (i = 0; i < ARRAY_SIZE(mxc_iomux_pins); i++) { mxc_request_iomux(mxc_iomux_pins[i].pin, mxc_iomux_pins[i].mux_mode); if (mxc_iomux_pins[i].pad_cfg) mxc_iomux_set_pad(mxc_iomux_pins[i].pin, mxc_iomux_pins[i].pad_cfg); if (mxc_iomux_pins[i].in_select) mxc_iomux_set_input(mxc_iomux_pins[i].in_select, mxc_iomux_pins[i].in_mode); } /* SD4 CD */ gpio_request(IOMUX_TO_GPIO(MX50_PIN_DISP_D15), "sd4_cd"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D15)); /* SD4 WP */ gpio_request(IOMUX_TO_GPIO(MX50_PIN_DISP_D14), "sd4_wp"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D14)); /* PMIC Interrupt */ gpio_request(IOMUX_TO_GPIO(MX50_PIN_UART1_CTS), "pmic_int"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_UART1_CTS)); /* WiFi Power */ gpio_request(IOMUX_TO_GPIO(MX50_PIN_SD3_WP), "sd3_wp"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_SD3_WP), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_SD3_WP), 1); /* WiFi spec, add delay */ mdelay(40); gpio_request(IOMUX_TO_GPIO(MX50_PIN_SSI_RXC), "gp5_6"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_SSI_RXC), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_SSI_RXC), 1); /*hall sensor*/ gpio_request(IOMUX_TO_GPIO(MX50_PIN_SD2_WP), "hall"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_SD2_WP)); /*Front light*/ gpio_request(IOMUX_TO_GPIO(MX50_PIN_PWM1), "fl_cntrl"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_PWM1), 0); /* Wait 5ms before powering on Papyrus */ mdelay(5); #ifdef CONFIG_SND_MXC_SOC mxc_request_iomux(MX50_PIN_SSI_TXC, IOMUX_CONFIG_ALT0); mxc_iomux_set_pad(MX50_PIN_SSI_TXC, PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_KEEPER | PAD_CTL_DRV_HIGH | PAD_CTL_ODE_OPENDRAIN_NONE); mx50_audio_clock_enable(1); #endif gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_VCOM0), "epdc_vcom"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EPDC_VCOM0), 0); gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRSTAT), "epdc_pwrstat"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRSTAT)); gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCOM), "epdc_pwrcom"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCOM)); gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCTRL0), "epdc_pwrctrl0"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCTRL0), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCTRL0), 1); gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCTRL1), "epdc_pwrctrl1"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EPDC_PWRCTRL1)); #ifdef CONFIG_SND_MXC_SOC gpio_request(IOMUX_TO_GPIO(MX50_PIN_EIM_DA4), "eim_da4"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EIM_DA4)); #endif gpio_request(IOMUX_TO_GPIO(MX50_PIN_OWIRE), "owire"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_OWIRE)); /* WAN Power */ gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EIM_RW), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_EIM_RW), 0); /* WAN USB */ gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_DISP_RD), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_DISP_RD), 0); /* WAN RF */ gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EIM_DA10), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_EIM_DA10), 0); /* WAN HMI Host->Modem IRQ */ gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EIM_DA9), 0); /* WAN MHI : Modem->Host IRQ */ gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EIM_DA8)); /* WAN FW Ready */ gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EIM_DA6)); /* EIM_DA10 and EIM_DA11 */ gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EIM_DA11), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_EIM_DA11), 0); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EIM_DA12), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_EIM_DA12), 0); /* Proximity */ gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D0)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EIM_DA0)); /* Proximity Reset */ gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_DISP_D7), 0); /* Accelerometer IRQ2 moved after Whitney protos */ gpio_request(IOMUX_TO_GPIO(MX50_PIN_SD1_D2), "sd1_d2"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_SD1_D2)); gpio_request(IOMUX_TO_GPIO(MX50_PIN_SD1_D3), "sd1_d3"); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_SD1_D3)); if (mx50_board_is(BOARD_ID_WHITNEY) || mx50_board_is(BOARD_ID_WHITNEY_WFO) ) { printk("Configure EMI_CS1 for whitney \n"); mxc_request_iomux(MX50_PIN_EIM_CS1, IOMUX_CONFIG_GPIO); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EIM_CS1)); mxc_iomux_set_pad(MX50_PIN_EIM_CS1, PAD_CTL_PKE_ENABLE | PAD_CTL_PUE_PULL | PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_DRV_HIGH | PAD_CTL_100K_PD); } /* EPDC */ gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_SDCE0), "epdc_sdce0"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EPDC_SDCE0), 0); gpio_request(IOMUX_TO_GPIO(MX50_PIN_EPDC_GDSP), "epdc_gdsp"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_EPDC_GDSP), 0); /* Accessory charging */ gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_EIM_DA13)); /* UART4 is not needed on !FINKLE */ if (!mx50_board_is(BOARD_ID_FINKLE_EVT1)) { mxc_free_iomux(MX50_PIN_UART4_TXD, IOMUX_CONFIG_ALT0); mxc_request_iomux(MX50_PIN_UART4_TXD, IOMUX_CONFIG_ALT1); gpio_request(IOMUX_TO_GPIO(MX50_PIN_UART4_TXD), "uart4_txd"); gpio_direction_output(IOMUX_TO_GPIO(MX50_PIN_UART4_TXD), 0); gpio_set_value(IOMUX_TO_GPIO(MX50_PIN_UART4_TXD), 0); } #ifndef CONFIG_MX50_YOSHI_SDCARD gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D8)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D9)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D10)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D11)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D12)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D13)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D14)); gpio_direction_input(IOMUX_TO_GPIO(MX50_PIN_DISP_D15)); #endif /* NAND family - 1.8V */ __raw_writel(0x2000, IO_ADDRESS(IOMUXC_BASE_ADDR) + 0x06c0); __raw_writel(0x2000, IO_ADDRESS(IOMUXC_BASE_ADDR) + 0x069c); }