@@ -1650,7 +1650,9 @@ static irqreturn_t irq_TE_handler(int irq_no, void *dev_id)
16501650 }
16511651#endif //DEBUG_TE_IRQ_COUNT
16521652
1653- fbtft_start_new_screen_transfer_async (pdata -> par );
1653+ if (pdata -> par -> ready_for_spi_async ){
1654+ fbtft_start_new_screen_transfer_async (pdata -> par );
1655+ }
16541656
16551657 return IRQ_HANDLED ;
16561658}
@@ -1661,7 +1663,7 @@ static struct fbtft_platform_data *fbtft_probe_dt(struct device *dev)
16611663{
16621664 struct device_node * node = dev -> of_node ;
16631665 struct fbtft_platform_data * pdata ;
1664- int gpio , irq_id , err ;
1666+ int gpio , err ;
16651667 enum of_gpio_flags of_flags ;
16661668 char * te_irq_name ;
16671669
@@ -1697,8 +1699,9 @@ static struct fbtft_platform_data *fbtft_probe_dt(struct device *dev)
16971699 pdata -> display .fbtftops .init_display = fbtft_init_display_dt ;
16981700 pdata -> display .fbtftops .request_gpios = fbtft_request_gpios_dt ;
16991701
1700- /* TE signal for Vsync */
1701- pdata -> te_irq = false;
1702+ /* TE signal for Vsync - Checking if GPIO is correct */
1703+ pdata -> te_irq_enabled = false;
1704+ pdata -> te_irq_id = 0 ;
17021705 te_irq_name = "te-irq" ;
17031706 if (of_find_property (node , te_irq_name , NULL )) {
17041707 gpio = of_get_named_gpio_flags (node , te_irq_name , 0 , & of_flags );
@@ -1709,21 +1712,13 @@ static struct fbtft_platform_data *fbtft_probe_dt(struct device *dev)
17091712 else {
17101713 pr_info ("%s: '%s' = GPIO%d\n" , __func__ , te_irq_name , gpio );
17111714
1712- irq_id = gpio_to_irq (gpio );
1713- if (irq_id < 0 ) {
1714- dev_err (dev ,"%s - Unable to request IRQ: %d\n" , __func__ , irq_id );
1715+ pdata -> te_irq_id = gpio_to_irq (gpio );
1716+ if (pdata -> te_irq_id < 0 ) {
1717+ dev_err (dev ,"%s - Unable to request IRQ: %d\n" , __func__ , pdata -> te_irq_id );
17151718 }
17161719 else {
1717- pr_info ("TE GPIO%d, IRQ id = %d\n" , gpio , irq_id );
1718-
1719- err = request_irq (irq_id , irq_TE_handler , IRQF_SHARED | IRQF_TRIGGER_RISING ,
1720- "TE" , pdata );
1721- if (err < 0 ) {
1722- dev_err (dev ,"ERROR initializing TE signal irq\n" );
1723- }
1724- else {
1725- pdata -> te_irq = true;
1726- }
1720+ pr_info ("TE GPIO%d, IRQ id = %d\n" , gpio , pdata -> te_irq_id );
1721+ pdata -> te_irq_enabled = true;
17271722 }
17281723 }
17291724 }
@@ -1757,7 +1752,7 @@ int fbtft_probe_common(struct fbtft_display *display,
17571752 struct fb_info * info ;
17581753 struct fbtft_par * par ;
17591754 struct fbtft_platform_data * pdata ;
1760- int ret ;
1755+ int ret , err ;
17611756
17621757 if (sdev )
17631758 dev = & sdev -> dev ;
@@ -1855,11 +1850,21 @@ int fbtft_probe_common(struct fbtft_display *display,
18551850 if (ret < 0 )
18561851 goto out_release ;
18571852
1853+ /** Initialize TE interrupt */
1854+ if (par -> pdata -> te_irq_enabled ){
1855+ err = request_irq (par -> pdata -> te_irq_id , irq_TE_handler , IRQF_SHARED | IRQF_TRIGGER_RISING ,
1856+ "TE" , par -> pdata );
1857+ if (err < 0 ) {
1858+ dev_err (dev ,"ERROR initializing TE signal irq\n" );
1859+ par -> pdata -> te_irq_enabled = false;
1860+ }
1861+ }
1862+
18581863 if (par -> spi_async_mode ) {
18591864 /* Start constant Display update using spi async */
18601865 par -> write_line_start = 0 ;
18611866 par -> write_line_end = par -> info -> var .yres - 1 ;
1862- if (par -> pdata -> te_irq )
1867+ if (par -> pdata -> te_irq_enabled )
18631868 par -> ready_for_spi_async = true;
18641869 else
18651870 fbtft_start_new_screen_transfer_async (par );
0 commit comments