Input: ads7846 - add wakeup support
Add wakeup support to the ads7846 driver. Platforms can enable wakeup capability by setting the wakeup flag in ads7846_platform_data. With this patch the ads7846 driver can be used to wake the system from suspend. Signed-off-by: Ranjith Lohithakshan <ranjithl@ti.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
		
					parent
					
						
							
								04b4b88cca
							
						
					
				
			
			
				commit
				
					
						fdba2bb1f2
					
				
			
		
					 2 changed files with 11 additions and 0 deletions
				
			
		| 
						 | 
					@ -822,6 +822,9 @@ static int ads7846_suspend(struct spi_device *spi, pm_message_t message)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_unlock_irq(&ts->lock);
 | 
						spin_unlock_irq(&ts->lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (device_may_wakeup(&ts->spi->dev))
 | 
				
			||||||
 | 
							enable_irq_wake(ts->spi->irq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -830,6 +833,9 @@ static int ads7846_resume(struct spi_device *spi)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ads7846 *ts = dev_get_drvdata(&spi->dev);
 | 
						struct ads7846 *ts = dev_get_drvdata(&spi->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (device_may_wakeup(&ts->spi->dev))
 | 
				
			||||||
 | 
							disable_irq_wake(ts->spi->irq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spin_lock_irq(&ts->lock);
 | 
						spin_lock_irq(&ts->lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ts->is_suspended = 0;
 | 
						ts->is_suspended = 0;
 | 
				
			||||||
| 
						 | 
					@ -1201,6 +1207,8 @@ static int __devinit ads7846_probe(struct spi_device *spi)
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		goto err_remove_attr_group;
 | 
							goto err_remove_attr_group;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						device_init_wakeup(&spi->dev, pdata->wakeup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 err_remove_attr_group:
 | 
					 err_remove_attr_group:
 | 
				
			||||||
| 
						 | 
					@ -1230,6 +1238,8 @@ static int __devexit ads7846_remove(struct spi_device *spi)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct ads7846		*ts = dev_get_drvdata(&spi->dev);
 | 
						struct ads7846		*ts = dev_get_drvdata(&spi->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						device_init_wakeup(&spi->dev, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ads784x_hwmon_unregister(spi, ts);
 | 
						ads784x_hwmon_unregister(spi, ts);
 | 
				
			||||||
	input_unregister_device(ts->input);
 | 
						input_unregister_device(ts->input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,5 +53,6 @@ struct ads7846_platform_data {
 | 
				
			||||||
	int	(*filter)	(void *filter_data, int data_idx, int *val);
 | 
						int	(*filter)	(void *filter_data, int data_idx, int *val);
 | 
				
			||||||
	void	(*filter_cleanup)(void *filter_data);
 | 
						void	(*filter_cleanup)(void *filter_data);
 | 
				
			||||||
	void	(*wait_for_sync)(void);
 | 
						void	(*wait_for_sync)(void);
 | 
				
			||||||
 | 
						bool	wakeup;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue