On Thu, Jan 28, 2021 at 4:33 PM Andy Shevchenko
[off-list ref] wrote:
On Thu, Jan 28, 2021 at 2:58 PM Carlis [off-list ref] wrote:
...
Taking all together you probably need to create a helper and use it
inside init_display(), like
static int init_tearing_effect_line(struct fbtft_par *par)
{
struct device *dev = par->info->device;
struct gpio_desc *te;
int irq, rc;
te = gpiod_get_optional(dev, "te", GPIOD_IN);
if (IS_ERR(te))
return dev_err_probe(dev, PTR_ERR(te), "Failed to request
te GPIO\n");
Sorry, here I missed the following:
/* Absence of TE IRQ is not critical */
if (!te)
return 0;
irq = gpiod_to_irq(te); // this value you have to save in the
driver's (per device) data structure.
/* GPIO is locked as an IRQ, we may drop the reference */
gpiod_put(te);
...and here:
if (irq < 0)
return irq;
init_completion(&spi_panel_te); // should be in the (per device)
data structure
rc = devm_request_irq(dev, irq, spi_panel_te_handler,
IRQF_TRIGGER_RISING, "TE_GPIO", par);
if (rc)
return dev_err_probe(dev, rc, "TE IRQ request failed.\n");
disable_irq_nosync(irq);
return irq;
}
--
With Best Regards,
Andy Shevchenko