예제 #1
0
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;
}
예제 #2
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);
}
예제 #3
0
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");
    }
}
예제 #4
0
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));
	
}
예제 #5
0
int gpio_keypad_inactive(void)
{	
	if (mx50_board_is(BOARD_ID_TEQUILA))
		return 0;
}
예제 #6
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);
}