Lines Matching full:stmpe

13 #include <linux/mfd/stmpe.h>
34 struct stmpe *stmpe; member
45 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_get() local
46 u8 reg = stmpe->regs[STMPE_IDX_GPMR_LSB + (offset / 8)]; in stmpe_gpio_get()
50 ret = stmpe_reg_read(stmpe, reg); in stmpe_gpio_get()
60 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_set() local
62 u8 reg = stmpe->regs[which + (offset / 8)]; in stmpe_gpio_set()
69 if (stmpe->regs[STMPE_IDX_GPSR_LSB] == stmpe->regs[STMPE_IDX_GPCR_LSB]) in stmpe_gpio_set()
70 stmpe_set_bits(stmpe, reg, mask, val ? mask : 0); in stmpe_gpio_set()
72 stmpe_reg_write(stmpe, reg, mask); in stmpe_gpio_set()
79 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_get_direction() local
80 u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB] - (offset / 8); in stmpe_gpio_get_direction()
84 ret = stmpe_reg_read(stmpe, reg); in stmpe_gpio_get_direction()
98 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_direction_output() local
99 u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB + (offset / 8)]; in stmpe_gpio_direction_output()
104 return stmpe_set_bits(stmpe, reg, mask, mask); in stmpe_gpio_direction_output()
111 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_direction_input() local
112 u8 reg = stmpe->regs[STMPE_IDX_GPDR_LSB + (offset / 8)]; in stmpe_gpio_direction_input()
115 return stmpe_set_bits(stmpe, reg, mask, 0); in stmpe_gpio_direction_input()
121 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_request() local
126 return stmpe_set_altfunc(stmpe, BIT(offset), STMPE_BLOCK_GPIO); in stmpe_gpio_request()
130 .label = "stmpe",
152 /* STMPE801 and STMPE 1600 don't have RE and FE registers */ in stmpe_gpio_irq_set_type()
153 if (stmpe_gpio->stmpe->partnum == STMPE801 || in stmpe_gpio_irq_set_type()
154 stmpe_gpio->stmpe->partnum == STMPE1600) in stmpe_gpio_irq_set_type()
182 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_irq_sync_unlock() local
183 int num_banks = DIV_ROUND_UP(stmpe->num_gpios, 8); in stmpe_gpio_irq_sync_unlock()
202 if (stmpe->partnum == STMPE1600) { in stmpe_gpio_irq_sync_unlock()
203 ret = stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_GPMR_LSB]); in stmpe_gpio_irq_sync_unlock()
205 dev_err(stmpe->dev, "Failed to read GPMR_LSB: %d\n", ret); in stmpe_gpio_irq_sync_unlock()
208 ret = stmpe_reg_read(stmpe, stmpe->regs[STMPE_IDX_GPMR_CSB]); in stmpe_gpio_irq_sync_unlock()
210 dev_err(stmpe->dev, "Failed to read GPMR_CSB: %d\n", ret); in stmpe_gpio_irq_sync_unlock()
217 if ((stmpe->partnum == STMPE801 || in stmpe_gpio_irq_sync_unlock()
218 stmpe->partnum == STMPE1600) && in stmpe_gpio_irq_sync_unlock()
230 stmpe_reg_write(stmpe, stmpe->regs[regmap[i][j]], new); in stmpe_gpio_irq_sync_unlock()
267 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_dbg_show_one() local
270 u8 dir_reg = stmpe->regs[STMPE_IDX_GPDR_LSB + bank]; in stmpe_dbg_show_one()
279 ret = stmpe_reg_read(stmpe, dir_reg); in stmpe_dbg_show_one()
314 switch (stmpe->partnum) { in stmpe_dbg_show_one()
320 edge_det_reg = stmpe->regs[STMPE_IDX_GPEDR_LSB + bank]; in stmpe_dbg_show_one()
321 ret = stmpe_reg_read(stmpe, edge_det_reg); in stmpe_dbg_show_one()
327 rise_reg = stmpe->regs[STMPE_IDX_GPRER_LSB + bank]; in stmpe_dbg_show_one()
328 fall_reg = stmpe->regs[STMPE_IDX_GPFER_LSB + bank]; in stmpe_dbg_show_one()
330 ret = stmpe_reg_read(stmpe, rise_reg); in stmpe_dbg_show_one()
334 ret = stmpe_reg_read(stmpe, fall_reg); in stmpe_dbg_show_one()
341 irqen_reg = stmpe->regs[STMPE_IDX_IEGPIOR_LSB + bank]; in stmpe_dbg_show_one()
348 ret = stmpe_reg_read(stmpe, irqen_reg); in stmpe_dbg_show_one()
375 .name = "stmpe-gpio",
390 struct stmpe *stmpe = stmpe_gpio->stmpe; in stmpe_gpio_irq() local
392 int num_banks = DIV_ROUND_UP(stmpe->num_gpios, 8); in stmpe_gpio_irq()
405 if (stmpe->partnum == STMPE1600) in stmpe_gpio_irq()
406 statmsbreg = stmpe->regs[STMPE_IDX_ISGPIOR_LSB]; in stmpe_gpio_irq()
408 statmsbreg = stmpe->regs[STMPE_IDX_ISGPIOR_MSB]; in stmpe_gpio_irq()
410 ret = stmpe_block_read(stmpe, statmsbreg, num_banks, status); in stmpe_gpio_irq()
415 int bank = (stmpe_gpio->stmpe->partnum == STMPE1600) ? i : in stmpe_gpio_irq()
439 if (stmpe->partnum != STMPE801 && stmpe->partnum != STMPE1600 && in stmpe_gpio_irq()
440 stmpe->partnum != STMPE1801) { in stmpe_gpio_irq()
441 stmpe_reg_write(stmpe, statmsbreg + i, status[i]); in stmpe_gpio_irq()
442 stmpe_reg_write(stmpe, in stmpe_gpio_irq()
443 stmpe->regs[STMPE_IDX_GPEDR_MSB] + i, in stmpe_gpio_irq()
468 static void stmpe_gpio_disable(void *stmpe) in stmpe_gpio_disable() argument
470 stmpe_disable(stmpe, STMPE_BLOCK_GPIO); in stmpe_gpio_disable()
476 struct stmpe *stmpe = dev_get_drvdata(dev->parent); in stmpe_gpio_probe() local
480 if (stmpe->num_gpios > MAX_GPIOS) { in stmpe_gpio_probe()
491 stmpe_gpio->stmpe = stmpe; in stmpe_gpio_probe()
493 stmpe_gpio->chip.ngpio = stmpe->num_gpios; in stmpe_gpio_probe()
502 ret = stmpe_enable(stmpe, STMPE_BLOCK_GPIO); in stmpe_gpio_probe()
506 ret = devm_add_action_or_reset(dev, stmpe_gpio_disable, stmpe); in stmpe_gpio_probe()
515 IRQF_ONESHOT, "stmpe-gpio", stmpe_gpio); in stmpe_gpio_probe()
537 .name = "stmpe-gpio",