Lines Matching defs:plgpio

32  * plgpio pins in all machines are not one to one mapped, bitwise with registers
54 * struct plgpio: plgpio driver specific structure
57 * base: base address of plgpio block
67 struct plgpio {
117 struct plgpio *plgpio = gpiochip_get_data(chip);
121 if (plgpio->p2o && (plgpio->p2o_regs & PTO_DIR_REG)) {
122 offset = plgpio->p2o(offset);
127 spin_lock_irqsave(&plgpio->lock, flags);
128 plgpio_reg_set(plgpio->regmap, offset, plgpio->regs.dir);
129 spin_unlock_irqrestore(&plgpio->lock, flags);
137 struct plgpio *plgpio = gpiochip_get_data(chip);
142 if (plgpio->p2o && (plgpio->p2o_regs & (PTO_DIR_REG | PTO_WDATA_REG))) {
143 tmp = plgpio->p2o(offset);
147 if (plgpio->p2o_regs & PTO_DIR_REG)
149 if (plgpio->p2o_regs & PTO_WDATA_REG)
153 spin_lock_irqsave(&plgpio->lock, flags);
155 plgpio_reg_set(plgpio->regmap, wdata_offset,
156 plgpio->regs.wdata);
158 plgpio_reg_reset(plgpio->regmap, wdata_offset,
159 plgpio->regs.wdata);
161 plgpio_reg_reset(plgpio->regmap, dir_offset, plgpio->regs.dir);
162 spin_unlock_irqrestore(&plgpio->lock, flags);
169 struct plgpio *plgpio = gpiochip_get_data(chip);
175 if (plgpio->p2o && (plgpio->p2o_regs & PTO_RDATA_REG)) {
176 offset = plgpio->p2o(offset);
181 return is_plgpio_set(plgpio->regmap, offset, plgpio->regs.rdata);
186 struct plgpio *plgpio = gpiochip_get_data(chip);
192 if (plgpio->p2o && (plgpio->p2o_regs & PTO_WDATA_REG)) {
193 offset = plgpio->p2o(offset);
199 plgpio_reg_set(plgpio->regmap, offset, plgpio->regs.wdata);
201 plgpio_reg_reset(plgpio->regmap, offset, plgpio->regs.wdata);
206 struct plgpio *plgpio = gpiochip_get_data(chip);
218 if (!IS_ERR(plgpio->clk)) {
219 ret = clk_enable(plgpio->clk);
224 if (plgpio->regs.enb == -1)
235 if (plgpio->p2o && (plgpio->p2o_regs & PTO_ENB_REG)) {
236 offset = plgpio->p2o(offset);
243 spin_lock_irqsave(&plgpio->lock, flags);
244 plgpio_reg_set(plgpio->regmap, offset, plgpio->regs.enb);
245 spin_unlock_irqrestore(&plgpio->lock, flags);
249 if (!IS_ERR(plgpio->clk))
250 clk_disable(plgpio->clk);
258 struct plgpio *plgpio = gpiochip_get_data(chip);
265 if (plgpio->regs.enb == -1)
269 if (plgpio->p2o && (plgpio->p2o_regs & PTO_ENB_REG)) {
270 offset = plgpio->p2o(offset);
275 spin_lock_irqsave(&plgpio->lock, flags);
276 plgpio_reg_reset(plgpio->regmap, offset, plgpio->regs.enb);
277 spin_unlock_irqrestore(&plgpio->lock, flags);
280 if (!IS_ERR(plgpio->clk))
281 clk_disable(plgpio->clk);
290 struct plgpio *plgpio = gpiochip_get_data(gc);
295 if (plgpio->p2o && (plgpio->p2o_regs & PTO_IE_REG)) {
296 offset = plgpio->p2o(offset);
301 spin_lock_irqsave(&plgpio->lock, flags);
302 plgpio_reg_set(plgpio->regmap, offset, plgpio->regs.ie);
303 spin_unlock_irqrestore(&plgpio->lock, flags);
310 struct plgpio *plgpio = gpiochip_get_data(gc);
315 if (plgpio->p2o && (plgpio->p2o_regs & PTO_IE_REG)) {
316 offset = plgpio->p2o(offset);
322 spin_lock_irqsave(&plgpio->lock, flags);
323 plgpio_reg_reset(plgpio->regmap, offset, plgpio->regs.ie);
324 spin_unlock_irqrestore(&plgpio->lock, flags);
330 struct plgpio *plgpio = gpiochip_get_data(gc);
335 if (offset >= plgpio->chip.ngpio)
338 if (plgpio->regs.eit == -1)
346 if (plgpio->regs.eit == -1)
349 reg_off = REG_OFFSET(0, plgpio->regs.eit, offset);
350 regmap_read(plgpio->regmap, reg_off, &val);
354 regmap_write(plgpio->regmap, reg_off, val | (1 << offset));
356 regmap_write(plgpio->regmap, reg_off, val & ~(1 << offset));
373 struct plgpio *plgpio = gpiochip_get_data(gc);
379 count = plgpio->chip.ngpio;
383 /* check all plgpio MIS registers for a possible interrupt */
385 regmap_read(plgpio->regmap, plgpio->regs.mis +
391 regmap_write(plgpio->regmap, plgpio->regs.mis +
407 if (plgpio->o2p && (plgpio->p2o_regs & PTO_MIS_REG)) {
408 pin = plgpio->o2p(offset);
425 * In spear310 there is inconsistency among bit positions in plgpio regiseters,
426 * for different plgpio pins. For example: for pin 27, bit offset is 23, pin
457 static int plgpio_probe_dt(struct platform_device *pdev, struct plgpio *plgpio)
464 plgpio->p2o = spear310_p2o;
465 plgpio->o2p = spear310_o2p;
466 plgpio->p2o_regs = PTO_WDATA_REG | PTO_DIR_REG | PTO_IE_REG |
470 if (!of_property_read_u32(np, "st-plgpio,ngpio", &val)) {
471 plgpio->chip.ngpio = val;
477 if (!of_property_read_u32(np, "st-plgpio,enb-reg", &val))
478 plgpio->regs.enb = val;
480 plgpio->regs.enb = -1;
482 if (!of_property_read_u32(np, "st-plgpio,wdata-reg", &val)) {
483 plgpio->regs.wdata = val;
489 if (!of_property_read_u32(np, "st-plgpio,dir-reg", &val)) {
490 plgpio->regs.dir = val;
496 if (!of_property_read_u32(np, "st-plgpio,ie-reg", &val)) {
497 plgpio->regs.ie = val;
503 if (!of_property_read_u32(np, "st-plgpio,rdata-reg", &val)) {
504 plgpio->regs.rdata = val;
510 if (!of_property_read_u32(np, "st-plgpio,mis-reg", &val)) {
511 plgpio->regs.mis = val;
517 if (!of_property_read_u32(np, "st-plgpio,eit-reg", &val))
518 plgpio->regs.eit = val;
520 plgpio->regs.eit = -1;
531 struct plgpio *plgpio;
534 plgpio = devm_kzalloc(&pdev->dev, sizeof(*plgpio), GFP_KERNEL);
535 if (!plgpio)
540 plgpio->regmap = device_node_to_regmap(regmap_np);
542 if (IS_ERR(plgpio->regmap)) {
544 plgpio->regmap);
545 return PTR_ERR(plgpio->regmap);
548 plgpio->regmap = device_node_to_regmap(pdev->dev.of_node);
549 if (IS_ERR(plgpio->regmap)) {
551 plgpio->regmap);
552 return PTR_ERR(plgpio->regmap);
556 ret = plgpio_probe_dt(pdev, plgpio);
562 plgpio->clk = devm_clk_get(&pdev->dev, NULL);
563 if (IS_ERR(plgpio->clk))
567 plgpio->csave_regs = devm_kcalloc(&pdev->dev,
568 DIV_ROUND_UP(plgpio->chip.ngpio, MAX_GPIO_PER_REG),
569 sizeof(*plgpio->csave_regs),
571 if (!plgpio->csave_regs)
575 platform_set_drvdata(pdev, plgpio);
576 spin_lock_init(&plgpio->lock);
578 plgpio->chip.base = -1;
579 plgpio->chip.request = plgpio_request;
580 plgpio->chip.free = plgpio_free;
581 plgpio->chip.direction_input = plgpio_direction_input;
582 plgpio->chip.direction_output = plgpio_direction_output;
583 plgpio->chip.get = plgpio_get_value;
584 plgpio->chip.set = plgpio_set_value;
585 plgpio->chip.label = dev_name(&pdev->dev);
586 plgpio->chip.parent = &pdev->dev;
587 plgpio->chip.owner = THIS_MODULE;
589 if (!IS_ERR(plgpio->clk)) {
590 ret = clk_prepare(plgpio->clk);
601 girq = &plgpio->chip.irq;
618 ret = gpiochip_add_data(&plgpio->chip, plgpio);
627 if (!IS_ERR(plgpio->clk))
628 clk_unprepare(plgpio->clk);
636 struct plgpio *plgpio = dev_get_drvdata(dev);
637 int i, reg_count = DIV_ROUND_UP(plgpio->chip.ngpio, MAX_GPIO_PER_REG);
643 if (plgpio->regs.enb != -1)
644 regmap_read(plgpio->regmap, plgpio->regs.enb + off,
645 &plgpio->csave_regs[i].enb);
646 if (plgpio->regs.eit != -1)
647 regmap_read(plgpio->regmap, plgpio->regs.eit + off,
648 &plgpio->csave_regs[i].eit);
649 regmap_read(plgpio->regmap, plgpio->regs.wdata + off,
650 &plgpio->csave_regs[i].wdata);
651 regmap_read(plgpio->regmap, plgpio->regs.dir + off,
652 &plgpio->csave_regs[i].dir);
653 regmap_read(plgpio->regmap, plgpio->regs.ie + off,
654 &plgpio->csave_regs[i].ie);
664 * bit values (non-plgpio bits), and retain captured value (plgpio bits).
668 regmap_read(plgpio->regmap, plgpio->regs.__reg + _off, &_tmp); \
670 plgpio->csave_regs[i].__reg = \
671 _tmp | (plgpio->csave_regs[i].__reg & _mask); \
676 struct plgpio *plgpio = dev_get_drvdata(dev);
677 int i, reg_count = DIV_ROUND_UP(plgpio->chip.ngpio, MAX_GPIO_PER_REG);
685 mask = (1 << (plgpio->chip.ngpio - i *
688 if (plgpio->regs.enb != -1)
691 if (plgpio->regs.eit != -1)
699 regmap_write(plgpio->regmap, plgpio->regs.wdata + off,
700 plgpio->csave_regs[i].wdata);
702 regmap_write(plgpio->regmap, plgpio->regs.dir + off,
703 plgpio->csave_regs[i].dir);
705 if (plgpio->regs.eit != -1)
706 regmap_write(plgpio->regmap, plgpio->regs.eit + off,
707 plgpio->csave_regs[i].eit);
709 regmap_write(plgpio->regmap, plgpio->regs.ie + off,
710 plgpio->csave_regs[i].ie);
712 if (plgpio->regs.enb != -1)
713 regmap_write(plgpio->regmap, plgpio->regs.enb + off,
714 plgpio->csave_regs[i].enb);
724 { .compatible = "st,spear-plgpio" },
731 .name = "spear-plgpio",