Пример #1
0
static void mxskbd_hwinit(struct platform_device *pdev)
{
	int i;
	int mask = 0;
	struct mxskbd_data *d = platform_get_drvdata(pdev);

	for (i = 0; i < MAX_CH; i++) {
		hw_lradc_init_ladder(d->chan[i],
				     LRADC_DELAY_TRIGGER_BUTTON, LRADC_DELAY);
		mask |= BM_LRADC_CTRL1_LRADC0_IRQ << d->chan[i];
	}
	__raw_writel(mask, d->base + HW_LRADC_CTRL1_CLR);

	/* set vddio lradc manually */
	hw_lradc_configure_channel(VDDIO_VOLTAGE_CH, 0, 0, 0); /* no dev2 */
	hw_lradc_set_delay_trigger(LRADC_DELAY_TRIGGER_BUTTON,
				   1 << VDDIO_VOLTAGE_CH,
				   1 << LRADC_DELAY_TRIGGER_BUTTON,
				   0, LRADC_DELAY);

	/* used only one interrupt */
	__raw_writel(BM_LRADC_CTRL1_LRADC0_IRQ_EN << d->chan[0],
		     d->base + HW_LRADC_CTRL1_SET);


	hw_lradc_set_delay_trigger_kick(LRADC_DELAY_TRIGGER_BUTTON, !0);
}
Пример #2
0
static void mxskbd_hwinit(struct platform_device *pdev)
{
	struct mxskbd_data *d = platform_get_drvdata(pdev);

	hw_lradc_init_ladder(d->chan, LRADC_DELAY_TRIGGER_BUTTON, 200);
	if (d->btn_irq > 0) {
		__raw_writel(d->btn_enable, d->base + HW_LRADC_CTRL0_SET);
		__raw_writel(d->btn_irq_ctrl, d->base + HW_LRADC_CTRL1_SET);
	} else {
		__raw_writel(BM_LRADC_CTRL1_LRADC0_IRQ << d->chan,
			     d->base + HW_LRADC_CTRL1_CLR);
		__raw_writel(BM_LRADC_CTRL1_LRADC0_IRQ_EN << d->chan,
			     d->base + HW_LRADC_CTRL1_SET);
	}
	hw_lradc_set_delay_trigger_kick(LRADC_DELAY_TRIGGER_BUTTON, !0);
}