コード例 #1
0
static void __init htcherald_lcd_init(void)
{
	u32 reg;
	unsigned int tries = 200;

	/* disable controller if active */
	reg = omap_readl(OMAP_LCDC_CONTROL);
	if (reg & OMAP_LCDC_CTRL_LCD_EN) {
		reg &= ~OMAP_LCDC_CTRL_LCD_EN;
		omap_writel(reg, OMAP_LCDC_CONTROL);

		/* wait for end of frame */
		while (!(omap_readl(OMAP_LCDC_STATUS) & OMAP_LCDC_STAT_DONE)) {
			tries--;
			if (!tries)
				break;
		}
		if (!tries)
			printk(KERN_WARNING "Timeout waiting for end of frame "
			       "-- LCD may not be available\n");

		/* turn off DMA */
		reg = omap_readw(OMAP_DMA_LCD_CCR);
		reg &= ~(1 << 7);
		omap_writew(reg, OMAP_DMA_LCD_CCR);

		reg = omap_readw(OMAP_DMA_LCD_CTRL);
		reg &= ~(1 << 8);
		omap_writew(reg, OMAP_DMA_LCD_CTRL);
	}
}
コード例 #2
0
ファイル: board-nokia770.c プロジェクト: GerardGarcia/linux
static void __init omap_nokia770_init_irq(void)
{
	/* On Nokia 770, the SleepX signal is masked with an
	 * MPUIO line by default.  It has to be unmasked for it
	 * to become functional */

	/* SleepX mask direction */
	omap_writew((omap_readw(0xfffb5008) & ~2), 0xfffb5008);
	/* Unmask SleepX signal */
	omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004);

	omap1_init_common_hw();
	omap1_init_irq();
}
コード例 #3
0
ファイル: clocks.c プロジェクト: iPodLinux/linux-2.6.7-ipod
int
ck_set_input(ck_t ck, ck_t input)
{
    int ret = 0, shift;
    unsigned short reg;
    unsigned long flags;

    if (!CK_IN_RANGE(ck) || !CK_CAN_SWITCH(ck)) {
        ret = -EINVAL;
        goto exit;
    }

    reg = omap_readw(CK_SELECT_REG(ck));
    shift = CK_SELECT_SHIFT(ck);

    spin_lock_irqsave(&clock_lock, flags);
    if (input == OMAP_CLKIN) {
        reg &= ~(1 << shift);
        omap_writew(reg, CK_SELECT_REG(ck));
        goto exit;
    } else if (input == CK_PARENT(ck)) {
        reg |= (1 << shift);
        omap_writew(reg, CK_SELECT_REG(ck));
        goto exit;
    }

    ret = -EINVAL;
exit:
    spin_unlock_irqrestore(&clock_lock, flags);
    return ret;
}
コード例 #4
0
static int __init omap_init_lcd_dma(void)
{
	int r;

	if (!cpu_class_is_omap1())
		return -ENODEV;

	if (cpu_is_omap16xx()) {
		u16 w;

		/* this would prevent OMAP sleep */
		w = omap_readw(OMAP1610_DMA_LCD_CTRL);
		w &= ~(1 << 8);
		omap_writew(w, OMAP1610_DMA_LCD_CTRL);
	}

	spin_lock_init(&lcd_dma.lock);

	r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0,
			"LCD DMA", NULL);
	if (r != 0)
		printk(KERN_ERR "unable to request IRQ for LCD DMA "
			       "(error %d)\n", r);

	return r;
}
コード例 #5
0
void omap_stop_lcd_dma(void)
{
	u16 w;

	lcd_dma.active = 0;
	if (cpu_is_omap15xx() || !lcd_dma.ext_ctrl)
		return;

	w = omap_readw(OMAP1610_DMA_LCD_CCR);
	w &= ~(1 << 7);
	omap_writew(w, OMAP1610_DMA_LCD_CCR);

	w = omap_readw(OMAP1610_DMA_LCD_CTRL);
	w &= ~(1 << 8);
	omap_writew(w, OMAP1610_DMA_LCD_CTRL);
}
コード例 #6
0
void omap_setup_lcd_dma(void)
{
	BUG_ON(lcd_dma.active);
	if (!cpu_is_omap15xx()) {
		/* Set some reasonable defaults */
		omap_writew(0x5440, OMAP1610_DMA_LCD_CCR);
		omap_writew(0x9102, OMAP1610_DMA_LCD_CSDP);
		omap_writew(0x0004, OMAP1610_DMA_LCD_LCH_CTRL);
	}
	set_b1_regs();
	if (!cpu_is_omap15xx()) {
		u16 w;

		w = omap_readw(OMAP1610_DMA_LCD_CCR);
		/*
		 * If DMA was already active set the end_prog bit to have
		 * the programmed register set loaded into the active
		 * register set.
		 */
		w |= 1 << 11;		/* End_prog */
		if (!lcd_dma.single_transfer)
			w |= (3 << 8);	/* Auto_init, repeat */
		omap_writew(w, OMAP1610_DMA_LCD_CCR);
	}
}
コード例 #7
0
ファイル: clocks.c プロジェクト: iPodLinux/linux-2.6.7-ipod
int
ck_get_input(ck_t ck, ck_t * input)
{
    int ret = -EINVAL;
    unsigned long flags;

    if (!CK_IN_RANGE(ck))
        goto exit;

    ret = 0;

    spin_lock_irqsave(&clock_lock, flags);
    if (CK_CAN_SWITCH(ck)) {
        int shift;
        unsigned short reg;

        reg = omap_readw(CK_SELECT_REG(ck));
        shift = CK_SELECT_SHIFT(ck);
        if (reg & (1 << shift)) {
            *input = CK_PARENT(ck);
            goto exit;
        }
    }

    *input = OMAP_CLKIN;

exit:
    spin_unlock_irqrestore(&clock_lock, flags);
    return ret;
}
コード例 #8
0
ファイル: clocks.c プロジェクト: iPodLinux/linux-2.6.7-ipod
static int
__ck_set_pll_rate(ck_t ck, int rate)
{
    unsigned short pll;
    unsigned long flags;

    if ((rate < 0) || (rate > CK_MAX_PLL_FREQ))
        return -EINVAL;

    /* Scan downward for the closest matching frequency */
    while (rate && !test_bit(rate, (unsigned long *)&ck_valid_table))
        rate--;

    if (!rate) {
        printk(KERN_ERR "%s: couldn't find a matching rate\n",
               __FUNCTION__);
        return -EINVAL;
    }

    spin_lock_irqsave(&clock_lock, flags);
    pll = omap_readw(CK_RATE_REG(ck));

    /* Clear the rate bits */
    pll &= ~(0x1f << 5);

    /* Set the rate bits */
    pll |= (ck_lookup_table[rate - 1] << 5);

    omap_writew(pll, CK_RATE_REG(ck));

    spin_unlock_irqrestore(&clock_lock, flags);

    return 0;
}
コード例 #9
0
ファイル: tahvo-usb.c プロジェクト: tmlind/linux
static irqreturn_t omap_otg_irq(int irq, void *arg)
{
	u16 otg_irq;

	otg_irq = omap_readw(OTG_IRQ_SRC);
	if (otg_irq & OPRT_CHG) {
		omap_writew(OPRT_CHG, OTG_IRQ_SRC);
	} else if (otg_irq & B_SRP_TMROUT) {
		omap_writew(B_SRP_TMROUT, OTG_IRQ_SRC);
	} else if (otg_irq & B_HNP_FAIL) {
		omap_writew(B_HNP_FAIL, OTG_IRQ_SRC);
	} else if (otg_irq & A_SRP_DETECT) {
		omap_writew(A_SRP_DETECT, OTG_IRQ_SRC);
	} else if (otg_irq & A_REQ_TMROUT) {
		omap_writew(A_REQ_TMROUT, OTG_IRQ_SRC);
	} else if (otg_irq & A_VBUS_ERR) {
		omap_writew(A_VBUS_ERR, OTG_IRQ_SRC);
	} else if (otg_irq & DRIVER_SWITCH) {
#ifdef CONFIG_USB_OTG
		if ((!(omap_readl(OTG_CTRL) & OTG_DRIVER_SEL)) &&
		   tu->otg.host && tu->otg.state == OTG_STATE_A_HOST) {
			/* role is host */
			usb_bus_start_enum(tu->otg.host,
					   tu->otg.host->otg_port);
		}
#endif
		omap_writew(DRIVER_SWITCH, OTG_IRQ_SRC);
	} else
		return IRQ_NONE;

	return IRQ_HANDLED;

}
コード例 #10
0
ファイル: clocks.c プロジェクト: iPodLinux/linux-2.6.7-ipod
int
ck_disable(ck_t ck)
{
    unsigned short reg;
    int ret = -EINVAL, shift;
    unsigned long flags;

    if (!CK_IN_RANGE(ck))
        goto exit;

    if (ck_debug)
        printk(KERN_DEBUG "%s: %s\n", __FUNCTION__, CK_NAME(ck));

    if (!CK_CAN_DISABLE(ck))
        goto exit;

    ret = 0;

    if (ck == OMAP_CLKIN)
        return -EINVAL;

    spin_lock_irqsave(&clock_lock, flags);
    reg = omap_readw(CK_ENABLE_REG(ck));
    shift = CK_ENABLE_SHIFT(ck);
    reg &= ~(1 << shift);
    omap_writew(reg, CK_ENABLE_REG(ck));
    spin_unlock_irqrestore(&clock_lock, flags);

exit:
    return ret;
}
コード例 #11
0
int omap_lcd_dma_running(void)
{
	/*
	 * On OMAP1510, internal LCD controller will start the transfer
	 * when it gets enabled, so assume DMA running if LCD enabled.
	 */
	if (cpu_is_omap15xx())
		if (omap_readw(OMAP_LCDC_CONTROL) & OMAP_LCDC_CTRL_LCD_EN)
			return 1;

	/* Check if LCD DMA is running */
	if (cpu_is_omap16xx())
		if (omap_readw(OMAP1610_DMA_LCD_CCR) & OMAP_DMA_CCR_EN)
			return 1;

	return 0;
}
コード例 #12
0
ファイル: omap_hsi.c プロジェクト: greenromproj/kb
static int omap_mux_disable_wakeup(const char *muxname)
{
	u16 val = 0;
	val = omap_readw(CA_WAKE_MUX_REG);
	val &= ~OMAP44XX_PADCONF_WAKEUPENABLE0;
	omap_writew(val, CA_WAKE_MUX_REG);
	return 0;
}
コード例 #13
0
void __init mapphone_padconf_init(void)
{
	int i;

#ifdef CONFIG_ARM_OF
	mux_setting_init();
#endif

	touch_int_fix();

	for (i = 0; i < ARRAY_SIZE(padconf_settings); i++) {
		if (is_omap343x_padconf_register(padconf_settings[i].offset)) {
			unsigned long addr = padconf_settings[i].offset
			    + OMAP343X_CTRL_BASE;


			/*
			   despite the w, omap_readw actual reads a short which
			   is a half word on this architecture
			 */
			unsigned short val = omap_readw(addr);
#ifdef CONFIG_EMU_UART_DEBUG
			if (is_emu_uart_iomux_reg(padconf_settings[i].offset)) {
				printk(KERN_ERR "padconf ignored, offset = 0x%04x\n",
						padconf_settings[i].offset);
				continue;
			}
#endif
			val &= ~(OMAP343X_PADCONF_SETTING_MASK);
			val |= padconf_settings[i].setting;

			/* the SIM mux settings are for OMAP3430 */
			if ((padconf_settings[i].offset == 0x150) ||
				(padconf_settings[i].offset == 0x152) ||
				(padconf_settings[i].offset == 0x154) ||
				(padconf_settings[i].offset == 0x156))	{
					if (cpu_is_omap3630())
						continue;
			}

			/* the SIM mux settings are for OMAP3630 */
			if ((padconf_settings[i].offset == 0xa54) ||
				(padconf_settings[i].offset == 0xa56) ||
				(padconf_settings[i].offset == 0xa58) ||
				(padconf_settings[i].offset == 0xa5a))	{
					if (cpu_is_omap3430())
						continue;
			}

			omap_writew(val, addr);
		} else {
			printk(KERN_ERR "padconf check failed, offset = 0x%04x\n",
						padconf_settings[i].offset);
		}
	}

	return;
}
コード例 #14
0
static int aat2862_suspend(struct i2c_client *client, pm_message_t state)
{
	//printk(KERN_INFO"%s: new state: %d\n",__func__, state.event);

	// 20100630 [email protected] Hub touchscreen power sequence [START_LGE]
	aat2862_touch_ldo_enable(client, 0);
	// 20100630 [email protected] Hub touchscreen power sequence [END_LGE]

	// 20101016 [email protected] Turn off unnecessary modules upon BL off [START_LGE]
#if 0	// Followings reduces around 20uA.
	gpio_direction_output(MY_HDMI_REG_EN, 0);
	gpio_set_value(MY_HDMI_REG_EN, 0);
	gpio_direction_output(MY_CAM_SUBPM_EN, 0);
	gpio_set_value(MY_CAM_SUBPM_EN, 0);
	gpio_direction_output(MY_CAM_VCM_EN, 0);
	gpio_set_value(MY_CAM_VCM_EN, 0);
	gpio_direction_output(MY_DMB_EN, 0);
	gpio_set_value(MY_DMB_EN, 0);
	gpio_direction_output(MY_MOTION_INT, 0);
	gpio_direction_output(MY_COM_INT, 0);
#endif
#if 0	// Followings reduces around 60uA.
	i2c3_scl = omap_readw(0x480021C2);	// sookyoung.kim	
	i2c3_sda = omap_readw(0x480021C4);	// sookyoung.kim	
	omap_writew(0x0000, 0x480021C2);	// sookyoung.kim	
	omap_writew(0x0000, 0x480021C4);	// sookyoung.kim	
#endif
#if 0	// Followings, coupled with memory refresh rate control, reduces around 600uA.
	i2c4_scl = omap_readw(0x48002A00);	// sookyoung.kim	
	i2c4_sda = omap_readw(0x48002A02);	// sookyoung.kim	
	omap_writew(0x0000, 0x48002A00);	// sookyoung.kim	
	omap_writew(0x0000, 0x48002A02);	// sookyoung.kim	
#endif
	// 20101016 [email protected] Turn off unnecessary modules upon BL off [END_LGE]


	client->dev.power.power_state = state;

	aat2862_write_reg(client, 0x02, 0x00);

	gpio_direction_output(MY_LCD_CP_EN, 0);
	gpio_set_value(MY_LCD_CP_EN, 0);

	return 0;
}
コード例 #15
0
static void __init htcoxygen_usb_otg(void)
{
	/* clock configuration */
	omap_writew(omap_readw(ULPD_SOFT_REQ) | (1 << 8) | SOFT_USB_CLK_REQ, ULPD_SOFT_REQ);

	//  clk_enable(&l3_ocpi_ck);
	omap_writew(omap_readw(ARM_IDLECT3) | (1 << 0), ARM_IDLECT3);

	/* pin muxing */
	omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 <<  2), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 <<  3), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) |  (1 << 15), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) |  (1 << 23), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) |  (1 << 26), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) |  (1 << 25), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 24), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 10), OMAP730_MODE_1);
	omap_writel(omap_readl(OMAP730_MODE_1) & ~(1 << 11), OMAP730_MODE_1);
}
コード例 #16
0
static void write_omap_mux_register(u16 offset, u8 mode, u8 input_en)
{
    u16 tmp_val, reg_val;
    u32 reg = OMAP343X_CTRL_BASE + offset;

    reg_val = mode | (input_en << 8) | 0x0018;
    tmp_val = omap_readw(reg) & ~(0x0007 | (1 << 8) | 0x0018);
    reg_val = reg_val | tmp_val;
    omap_writew(reg_val, reg);
}
コード例 #17
0
static void htcoxygen_lcd_init(void)
{
        u32 reg;
        /* disable controller if active */
        reg = omap_readl(OMAP_LCDC_CONTROL);
        if (reg & OMAP_LCDC_CTRL_LCD_EN) {
                reg &= ~OMAP_LCDC_CTRL_LCD_EN;
                omap_writel(reg, OMAP_LCDC_CONTROL);

                /* wait for end of frame */
                while (!(omap_readl(OMAP_LCDC_STATUS) & OMAP_LCDC_STAT_DONE));

                /* turn off DMA */
                reg = omap_readw(OMAP_DMA_LCD_CCR);
                reg &= ~(1 << 7);
                omap_writew(reg, OMAP_DMA_LCD_CCR);

                reg = omap_readw(OMAP_DMA_LCD_CTRL);
                reg &= ~(1 << 8);
                omap_writew(reg, OMAP_DMA_LCD_CTRL);
        }
}
コード例 #18
0
ファイル: board-nokia770.c プロジェクト: 08opt/linux
static void __init omap_nokia770_init(void)
{
	/* On Nokia 770, the SleepX signal is masked with an
	 * MPUIO line by default.  It has to be unmasked for it
	 * to become functional */

	/* SleepX mask direction */
	omap_writew((omap_readw(0xfffb5008) & ~2), 0xfffb5008);
	/* Unmask SleepX signal */
	omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004);

	platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices));
	spi_register_board_info(nokia770_spi_board_info,
				ARRAY_SIZE(nokia770_spi_board_info));
	omap_serial_init();
	omap_register_i2c_bus(1, 100, NULL, 0);
	hwa742_dev_init();
	ads7846_dev_init();
	mipid_dev_init();
	omap1_usb_init(&nokia770_usb_config);
	nokia770_mmc_init();
}
コード例 #19
0
void omap_enable_lcd_dma(void)
{
	u16 w;

	/*
	 * Set the Enable bit only if an external controller is
	 * connected. Otherwise the OMAP internal controller will
	 * start the transfer when it gets enabled.
	 */
	if (cpu_is_omap15xx() || !lcd_dma.ext_ctrl)
		return;

	w = omap_readw(OMAP1610_DMA_LCD_CTRL);
	w |= 1 << 8;
	omap_writew(w, OMAP1610_DMA_LCD_CTRL);

	lcd_dma.active = 1;

	w = omap_readw(OMAP1610_DMA_LCD_CCR);
	w |= 1 << 7;
	omap_writew(w, OMAP1610_DMA_LCD_CCR);
}
コード例 #20
0
ファイル: reset.c プロジェクト: 0x7f454c46/linux
void omap1_restart(enum reboot_mode mode, const char *cmd)
{
	/*
	 * Workaround for 5912/1611b bug mentioned in sprz209d.pdf p. 28
	 * "Global Software Reset Affects Traffic Controller Frequency".
	 */
	if (cpu_is_omap5912()) {
		omap_writew(omap_readw(DPLL_CTL) & ~(1 << 4), DPLL_CTL);
		omap_writew(0x8, ARM_RSTCT1);
	}

	omap_writew(1, ARM_RSTCT1);
}
コード例 #21
0
ファイル: clocks.c プロジェクト: iPodLinux/linux-2.6.7-ipod
static int
__ck_get_clkm_rate(ck_t ck)
{
    static int bits2div[] = { 1, 2, 4, 8 };
    int in, bits, reg, shift;

    reg = omap_readw(CK_RATE_REG(ck));
    shift = CK_RATE_SHIFT(ck);

    in = ck_get_rate(CK_PARENT(ck));
    bits = (reg & (3 << shift)) >> shift;

    return (in / bits2div[bits]);
}
コード例 #22
0
ファイル: clocks.c プロジェクト: iPodLinux/linux-2.6.7-ipod
static int
__ck_get_pll_rate(ck_t ck)
{
    int m, d;

    unsigned short pll = omap_readw(CK_RATE_REG(ck));

    m = (pll & (0x1f << 7)) >> 7;
    m = m ? m : 1;
    d = (pll & (3 << 5)) >> 5;
    d++;

    return ((source_clock * m) / d);
}
コード例 #23
0
ファイル: ams-delta.c プロジェクト: Herysutrisno/mpc5200
static u_char ams_delta_read_byte(struct mtd_info *mtd)
{
    u_char res;
    struct nand_chip *this = mtd->priv;

    ams_delta_latch2_write(AMS_DELTA_LATCH2_NAND_NRE, 0);
    ndelay(40);
    omap_writew(~0, (OMAP_MPUIO_BASE + OMAP_MPUIO_IO_CNTL));
    res = omap_readw(this->IO_ADDR_R);
    ams_delta_latch2_write(AMS_DELTA_LATCH2_NAND_NRE,
                           AMS_DELTA_LATCH2_NAND_NRE);

    return res;
}
コード例 #24
0
void omap_free_lcd_dma(void)
{
	spin_lock(&lcd_dma.lock);
	if (!lcd_dma.reserved) {
		spin_unlock(&lcd_dma.lock);
		printk(KERN_ERR "LCD DMA is not reserved\n");
		BUG();
		return;
	}
	if (!cpu_is_omap15xx())
		omap_writew(omap_readw(OMAP1610_DMA_LCD_CCR) & ~1,
			    OMAP1610_DMA_LCD_CCR);
	lcd_dma.reserved = 0;
	spin_unlock(&lcd_dma.lock);
}
コード例 #25
0
static void __init omap_fsample_init(void)
{
	

	omap_writew(omap_readw(OMAP7XX_DSP_M_CTL) & ~1, OMAP7XX_DSP_M_CTL);



	
	omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_0);
	omap_writel(0x00000088, OMAP7XX_FLASH_ACFG_0);

	omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_1);
	omap_writel(0x00000000, OMAP7XX_FLASH_ACFG_1);

	omap_writel(omap_readl(OMAP7XX_IO_CONF_9) & 0x1FFFFFFF,
			OMAP7XX_IO_CONF_9);

	fsample_init_smc91x();

	if (gpio_request(FSAMPLE_NAND_RB_GPIO_PIN, "NAND ready") < 0)
		BUG();
	gpio_direction_input(FSAMPLE_NAND_RB_GPIO_PIN);

	omap_cfg_reg(L3_1610_FLASH_CS2B_OE);
	omap_cfg_reg(M8_1610_FLASH_CS2B_WE);

	
	omap_cfg_reg(E2_7XX_KBR0);
	omap_cfg_reg(J7_7XX_KBR1);
	omap_cfg_reg(E1_7XX_KBR2);
	omap_cfg_reg(F3_7XX_KBR3);
	omap_cfg_reg(D2_7XX_KBR4);
	omap_cfg_reg(C2_7XX_KBC0);
	omap_cfg_reg(D3_7XX_KBC1);
	omap_cfg_reg(E4_7XX_KBC2);
	omap_cfg_reg(F4_7XX_KBC3);
	omap_cfg_reg(E3_7XX_KBC4);

	platform_add_devices(devices, ARRAY_SIZE(devices));

	omap_serial_init();
	omap_register_i2c_bus(1, 100, NULL, 0);

	omapfb_set_lcd_config(&fsample_lcd_config);
}
コード例 #26
0
/*
 * Check if bootloader / platform code has configured the SDI pads properly.
 * This means it either configured all required pads for SDI mode, or that it
 * left all the required pads unconfigured.
 */
static int sdi_pad_init(struct omap_display *display)
{
	unsigned req_map;
	bool configured = false;
	bool unconfigured = false;
	int data_pairs;
	int i;

	data_pairs = display->hw_config.u.sdi.datapairs;
	req_map = (1 << (data_pairs * 2)) - 1;		/* data lanes */
	req_map |= 3 << 6;				/* clk lane */
	for (i = 0; i < ARRAY_SIZE(sdi_pads); i++) {
		u32 reg;
		u32 val;

		if (!((1 << i) & req_map))
			/* Ignore unneded pads. */
			continue;
		reg = CONTROL_PADCONF_BASE + sdi_pads[i];
		val = omap_readw(reg);
		switch (val & 0x07) {	/* pad mode */
		case 1:
			if (unconfigured)
				break;
			/* Is the pull configuration ok for SDI mode? */
			if ((val & OMAP_SDI_PAD_MASK) != OMAP_SDI_PAD_EN)
				break;
			configured = true;
			break;
		case 0:
		case 7:
			if (configured)
				break;
			unconfigured = true;
			break;
		default:
			break;
		}
	}
	if (i != ARRAY_SIZE(sdi_pads)) {
		DSSERR("SDI: invalid pad configuration\n");
		return -1;
	}

	return 0;
}
コード例 #27
0
static irqreturn_t lcd_dma_irq_handler(int irq, void *dev_id)
{
	u16 w;

	w = omap_readw(OMAP1610_DMA_LCD_CTRL);
	if (unlikely(!(w & (1 << 3)))) {
		printk(KERN_WARNING "Spurious LCD DMA IRQ\n");
		return IRQ_NONE;
	}
	/* Ack the IRQ */
	w |= (1 << 3);
	omap_writew(w, OMAP1610_DMA_LCD_CTRL);
	lcd_dma.active = 0;
	if (lcd_dma.callback != NULL)
		lcd_dma.callback(w, lcd_dma.cb_data);

	return IRQ_HANDLED;
}
コード例 #28
0
ファイル: board-ams-delta.c プロジェクト: 250bpm/linux-2.6
static void __init ams_delta_init(void)
{
	/* mux pins for uarts */
	omap_cfg_reg(UART1_TX);
	omap_cfg_reg(UART1_RTS);

	/* parallel camera interface */
	omap_cfg_reg(H19_1610_CAM_EXCLK);
	omap_cfg_reg(J15_1610_CAM_LCLK);
	omap_cfg_reg(L18_1610_CAM_VS);
	omap_cfg_reg(L15_1610_CAM_HS);
	omap_cfg_reg(L19_1610_CAM_D0);
	omap_cfg_reg(K14_1610_CAM_D1);
	omap_cfg_reg(K15_1610_CAM_D2);
	omap_cfg_reg(K19_1610_CAM_D3);
	omap_cfg_reg(K18_1610_CAM_D4);
	omap_cfg_reg(J14_1610_CAM_D5);
	omap_cfg_reg(J19_1610_CAM_D6);
	omap_cfg_reg(J18_1610_CAM_D7);

	iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));

	omap_board_config = ams_delta_config;
	omap_board_config_size = ARRAY_SIZE(ams_delta_config);
	omap_serial_init();
	omap_register_i2c_bus(1, 100, NULL, 0);

	/* Clear latch2 (NAND, LCD, modem enable) */
	ams_delta_latch2_write(~0, 0);

	omap1_usb_init(&ams_delta_usb_config);
	omap1_set_camera_info(&ams_delta_camera_platform_data);
#ifdef CONFIG_LEDS_TRIGGERS
	led_trigger_register_simple("ams_delta_camera",
			&ams_delta_camera_led_trigger);
#endif
	platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));

#ifdef CONFIG_AMS_DELTA_FIQ
	ams_delta_init_fiq();
#endif

	omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1);
}
コード例 #29
0
static void __init ams_delta_init(void)
{
	/* mux pins for uarts */
	omap_cfg_reg(UART1_TX);
	omap_cfg_reg(UART1_RTS);

	iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));

	omap_board_config = ams_delta_config;
	omap_board_config_size = ARRAY_SIZE(ams_delta_config);
	omap_serial_init();
	omap_register_i2c_bus(1, 100, NULL, 0);

	/* Clear latch2 (NAND, LCD, modem enable) */
	ams_delta_latch2_write(~0, 0);

	omap_usb_init(&ams_delta_usb_config);
	platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));

	omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1);
}
コード例 #30
0
static void __init omap_perseus2_map_io(void)
{
	omap_map_io();
	iotable_init(omap_perseus2_io_desc,
		     ARRAY_SIZE(omap_perseus2_io_desc));

	/* Early, board-dependent init */

	/*
	 * Hold GSM Reset until needed
	 */
	omap_writew(omap_readw(OMAP730_DSP_M_CTL) & ~1, OMAP730_DSP_M_CTL);

	/*
	 * UARTs -> done automagically by 8250 driver
	 */

	/*
	 * CSx timings, GPIO Mux ... setup
	 */

	/* Flash: CS0 timings setup */
	omap_writel(0x0000fff3, OMAP730_FLASH_CFG_0);
	omap_writel(0x00000088, OMAP730_FLASH_ACFG_0);

	/*
	 * Ethernet support trough the debug board
	 * CS1 timings setup
	 */
	omap_writel(0x0000fff3, OMAP730_FLASH_CFG_1);
	omap_writel(0x00000000, OMAP730_FLASH_ACFG_1);

	/*
	 * Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
	 * It is used as the Ethernet controller interrupt
	 */
	omap_writel(omap_readl(OMAP730_IO_CONF_9) & 0x1FFFFFFF, OMAP730_IO_CONF_9);
	omap_serial_init(p2_serial_ports);
}