static void pcm990_lcd_power(int on, struct fb_var_screeninfo *var) { if (on) { /* enable LCD-Latches * power on LCD */ pcm990_cpld_writeb(PCM990_CTRL_LCDPWR + PCM990_CTRL_LCDON, PCM990_CTRL_REG3); } else { /* disable LCD-Latches * power off LCD */ pcm990_cpld_writeb(0, PCM990_CTRL_REG3); } }
static void pcm990_unmask_irq(struct irq_data *d) { int pcm990_irq = (d->irq - PCM027_IRQ(0)); u8 val; /* the irq can be acknowledged only if deasserted, so it's done here */ pcm990_irq_enabled |= (1 << pcm990_irq); val = pcm990_cpld_readb(PCM990_CTRL_INTSETCLR); val |= 1 << pcm990_irq; pcm990_cpld_writeb(val, PCM990_CTRL_INTSETCLR); pcm990_cpld_writeb(pcm990_irq_enabled, PCM990_CTRL_INTMSKENA); }
static void pcm990_mask_ack_irq(struct irq_data *d) { int pcm990_irq = (d->irq - PCM027_IRQ(0)); pcm990_irq_enabled &= ~(1 << pcm990_irq); pcm990_cpld_writeb(pcm990_irq_enabled, PCM990_CTRL_INTMSKENA); }
static void __init pcm990_init_irq(void) { int irq; /* setup extra PCM990 irqs */ for (irq = PCM027_IRQ(0); irq <= PCM027_IRQ(3); irq++) { irq_set_chip_and_handler(irq, &pcm990_irq_chip, handle_level_irq); set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); } /* disable all Interrupts */ pcm990_cpld_writeb(0x0, PCM990_CTRL_INTMSKENA); pcm990_cpld_writeb(0xff, PCM990_CTRL_INTSETCLR); irq_set_chained_handler(PCM990_CTRL_INT_IRQ, pcm990_irq_handler); irq_set_irq_type(PCM990_CTRL_INT_IRQ, PCM990_CTRL_INT_IRQ_EDGE); }
static void pcm990_mci_setpower(struct device *dev, unsigned int vdd) { struct pxamci_platform_data *p_d = dev->platform_data; u8 val; val = pcm990_cpld_readb(PCM990_CTRL_REG5); if ((1 << vdd) & p_d->ocr_mask) val |= PCM990_CTRL_MMC2PWR; else val &= ~PCM990_CTRL_MMC2PWR; pcm990_cpld_writeb(PCM990_CTRL_MMC2PWR, PCM990_CTRL_REG5); }