diff options
Diffstat (limited to 'arch/arm/common/sa1111.c')
| -rw-r--r-- | arch/arm/common/sa1111.c | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c index a52a27c1d9b..517d50ddbeb 100644 --- a/arch/arm/common/sa1111.c +++ b/arch/arm/common/sa1111.c @@ -185,13 +185,10 @@ static struct sa1111_dev_info sa1111_devices[] = {  	},  }; -void __init sa1111_adjust_zones(int node, unsigned long *size, unsigned long *holes) +void __init sa1111_adjust_zones(unsigned long *size, unsigned long *holes)  {  	unsigned int sz = SZ_1M >> PAGE_SHIFT; -	if (node != 0) -		sz = 0; -  	size[1] = size[0] - sz;  	size[0] = sz;  } @@ -951,8 +948,6 @@ static int sa1111_resume(struct platform_device *dev)  	if (!save)  		return 0; -	spin_lock_irqsave(&sachip->lock, flags); -  	/*  	 * Ensure that the SA1111 is still here.  	 * FIXME: shouldn't do this here. @@ -969,6 +964,13 @@ static int sa1111_resume(struct platform_device *dev)  	 * First of all, wake up the chip.  	 */  	sa1111_wake(sachip); + +	/* +	 * Only lock for write ops. Also, sa1111_wake must be called with +	 * released spinlock! +	 */ +	spin_lock_irqsave(&sachip->lock, flags); +  	sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0);  	sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); @@ -1023,13 +1025,12 @@ static int sa1111_remove(struct platform_device *pdev)  	struct sa1111 *sachip = platform_get_drvdata(pdev);  	if (sachip) { -		__sa1111_remove(sachip); -		platform_set_drvdata(pdev, NULL); -  #ifdef CONFIG_PM  		kfree(sachip->saved_state);  		sachip->saved_state = NULL;  #endif +		__sa1111_remove(sachip); +		platform_set_drvdata(pdev, NULL);  	}  	return 0;  |