mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 23:34:05 +08:00
mfd: input: iio: ti_am335x_adc: use one structure for ti_tscadc_dev
The mfd driver creates platform data for the child devices and it is the ti_tscadc_dev struct. This struct is copied for the two devices. The copy of the structure makes a common lock in this structure a little less usefull. Therefore the platform data is not a pointer to the structure and the same structure is used. While doing the change I noticed that the suspend/resume code assumes the wrong pointer for ti_tscadc_dev and this has been fixed as well. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
This commit is contained in:
parent
d683b96b07
commit
a9bce1b03c
@ -140,7 +140,7 @@ static int tiadc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct iio_dev *indio_dev;
|
||||
struct tiadc_device *adc_dev;
|
||||
struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data;
|
||||
struct ti_tscadc_dev *tscadc_dev = ti_tscadc_dev_get(pdev);
|
||||
struct mfd_tscadc_board *pdata;
|
||||
int err;
|
||||
|
||||
@ -205,9 +205,10 @@ static int tiadc_suspend(struct device *dev)
|
||||
{
|
||||
struct iio_dev *indio_dev = dev_get_drvdata(dev);
|
||||
struct tiadc_device *adc_dev = iio_priv(indio_dev);
|
||||
struct ti_tscadc_dev *tscadc_dev = dev->platform_data;
|
||||
struct ti_tscadc_dev *tscadc_dev;
|
||||
unsigned int idle;
|
||||
|
||||
tscadc_dev = ti_tscadc_dev_get(to_platform_device(dev));
|
||||
if (!device_may_wakeup(tscadc_dev->dev)) {
|
||||
idle = tiadc_readl(adc_dev, REG_CTRL);
|
||||
idle &= ~(CNTRLREG_TSCSSENB);
|
||||
|
@ -262,7 +262,7 @@ static int titsc_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct titsc *ts_dev;
|
||||
struct input_dev *input_dev;
|
||||
struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data;
|
||||
struct ti_tscadc_dev *tscadc_dev = ti_tscadc_dev_get(pdev);
|
||||
struct mfd_tscadc_board *pdata;
|
||||
int err;
|
||||
|
||||
@ -329,8 +329,8 @@ err_free_mem:
|
||||
|
||||
static int titsc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data;
|
||||
struct titsc *ts_dev = tscadc_dev->tsc;
|
||||
struct titsc *ts_dev = platform_get_drvdata(pdev);
|
||||
u32 steps;
|
||||
|
||||
free_irq(ts_dev->irq, ts_dev);
|
||||
|
||||
@ -344,10 +344,11 @@ static int titsc_remove(struct platform_device *pdev)
|
||||
#ifdef CONFIG_PM
|
||||
static int titsc_suspend(struct device *dev)
|
||||
{
|
||||
struct ti_tscadc_dev *tscadc_dev = dev->platform_data;
|
||||
struct titsc *ts_dev = tscadc_dev->tsc;
|
||||
struct titsc *ts_dev = dev_get_drvdata(dev);
|
||||
struct ti_tscadc_dev *tscadc_dev;
|
||||
unsigned int idle;
|
||||
|
||||
tscadc_dev = ti_tscadc_dev_get(to_platform_device(dev));
|
||||
if (device_may_wakeup(tscadc_dev->dev)) {
|
||||
idle = titsc_readl(ts_dev, REG_IRQENABLE);
|
||||
titsc_writel(ts_dev, REG_IRQENABLE,
|
||||
@ -359,9 +360,10 @@ static int titsc_suspend(struct device *dev)
|
||||
|
||||
static int titsc_resume(struct device *dev)
|
||||
{
|
||||
struct ti_tscadc_dev *tscadc_dev = dev->platform_data;
|
||||
struct titsc *ts_dev = tscadc_dev->tsc;
|
||||
struct titsc *ts_dev = dev_get_drvdata(dev);
|
||||
struct ti_tscadc_dev *tscadc_dev;
|
||||
|
||||
tscadc_dev = ti_tscadc_dev_get(to_platform_device(dev));
|
||||
if (device_may_wakeup(tscadc_dev->dev)) {
|
||||
titsc_writel(ts_dev, REG_IRQWAKEUP,
|
||||
0x00);
|
||||
|
@ -176,14 +176,14 @@ static int ti_tscadc_probe(struct platform_device *pdev)
|
||||
/* TSC Cell */
|
||||
cell = &tscadc->cells[TSC_CELL];
|
||||
cell->name = "tsc";
|
||||
cell->platform_data = tscadc;
|
||||
cell->pdata_size = sizeof(*tscadc);
|
||||
cell->platform_data = &tscadc;
|
||||
cell->pdata_size = sizeof(tscadc);
|
||||
|
||||
/* ADC Cell */
|
||||
cell = &tscadc->cells[ADC_CELL];
|
||||
cell->name = "tiadc";
|
||||
cell->platform_data = tscadc;
|
||||
cell->pdata_size = sizeof(*tscadc);
|
||||
cell->platform_data = &tscadc;
|
||||
cell->pdata_size = sizeof(tscadc);
|
||||
|
||||
err = mfd_add_devices(&pdev->dev, pdev->id, tscadc->cells,
|
||||
TSCADC_CELLS, NULL, 0, NULL);
|
||||
|
@ -149,4 +149,11 @@ struct ti_tscadc_dev {
|
||||
struct adc_device *adc;
|
||||
};
|
||||
|
||||
static inline struct ti_tscadc_dev *ti_tscadc_dev_get(struct platform_device *p)
|
||||
{
|
||||
struct ti_tscadc_dev **tscadc_dev = p->dev.platform_data;
|
||||
|
||||
return *tscadc_dev;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user