static int kempld_gpio_pincount(struct kempld_device_data *pld) { u16 evt, evt_back; kempld_get_mutex(pld); /* Backup event register as it might be already initialized */ evt_back = kempld_read16(pld, KEMPLD_GPIO_EVT_LVL_EDGE); /* Clear event register */ kempld_write16(pld, KEMPLD_GPIO_EVT_LVL_EDGE, 0x0000); /* Read back event register */ evt = kempld_read16(pld, KEMPLD_GPIO_EVT_LVL_EDGE); /* Restore event register */ kempld_write16(pld, KEMPLD_GPIO_EVT_LVL_EDGE, evt_back); kempld_release_mutex(pld); return evt ? __ffs(evt) : 16; }
/** * kempld_write32 - write 32 bit register * @pld: kempld_device_data structure describing the PLD * @index: register index on the chip * @data: new register value * * kempld_get_mutex must be called prior to calling this function. */ void kempld_write32(struct kempld_device_data *pld, u8 index, u32 data) { kempld_write16(pld, index, (u16)data); kempld_write16(pld, index + 2, (u16)(data >> 16)); }