mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	This fixes various problems with parsing platform NVRAM. It's required to get BCM43602 working in most cases. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 45802
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From: Arend van Spriel <arend@broadcom.com>
 | |
| Date: Wed, 27 May 2015 19:31:41 +0200
 | |
| Subject: [PATCH] brcmfmac: fix invalid access to struct acpi_device fields
 | |
| 
 | |
| The fields of struct acpi_device are only known when CONFIG_ACPI is
 | |
| defined. Fix this by using a helper function. This will resolve the
 | |
| issue found in linux-next:
 | |
| 
 | |
|  ../brcmfmac/bcmsdh.c: In function 'brcmf_ops_sdio_probe':
 | |
|  ../brcmfmac/bcmsdh.c:1139:7: error: dereferencing pointer to incomplete type
 | |
|    adev->flags.power_manageable = 0;
 | |
|        ^
 | |
| 
 | |
| Fixes: f0992ace680c ("brcmfmac: prohibit ACPI power management ...")
 | |
| Cc: Fu, Zhonghui <zhonghui.fu@linux.intel.com>
 | |
| Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
 | |
| Signed-off-by: Arend van Spriel <arend@broadcom.com>
 | |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
 | |
| ---
 | |
| 
 | |
| --- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
 | |
| +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c
 | |
| @@ -1117,6 +1117,18 @@ MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_id
 | |
|  static struct brcmfmac_sdio_platform_data *brcmfmac_sdio_pdata;
 | |
|  
 | |
|  
 | |
| +static void brcmf_sdiod_acpi_set_power_manageable(struct device *dev,
 | |
| +						  int val)
 | |
| +{
 | |
| +#if IS_ENABLED(CONFIG_ACPI)
 | |
| +	struct acpi_device *adev;
 | |
| +
 | |
| +	adev = ACPI_COMPANION(dev);
 | |
| +	if (adev)
 | |
| +		adev->flags.power_manageable = 0;
 | |
| +#endif
 | |
| +}
 | |
| +
 | |
|  static int brcmf_ops_sdio_probe(struct sdio_func *func,
 | |
|  				const struct sdio_device_id *id)
 | |
|  {
 | |
| @@ -1124,7 +1136,6 @@ static int brcmf_ops_sdio_probe(struct s
 | |
|  	struct brcmf_sdio_dev *sdiodev;
 | |
|  	struct brcmf_bus *bus_if;
 | |
|  	struct device *dev;
 | |
| -	struct acpi_device *adev;
 | |
|  
 | |
|  	brcmf_dbg(SDIO, "Enter\n");
 | |
|  	brcmf_dbg(SDIO, "Class=%x\n", func->class);
 | |
| @@ -1132,11 +1143,9 @@ static int brcmf_ops_sdio_probe(struct s
 | |
|  	brcmf_dbg(SDIO, "sdio device ID: 0x%04x\n", func->device);
 | |
|  	brcmf_dbg(SDIO, "Function#: %d\n", func->num);
 | |
|  
 | |
| -	/* prohibit ACPI power management for this device */
 | |
|  	dev = &func->dev;
 | |
| -	adev = ACPI_COMPANION(dev);
 | |
| -	if (adev)
 | |
| -		adev->flags.power_manageable = 0;
 | |
| +	/* prohibit ACPI power management for this device */
 | |
| +	brcmf_sdiod_acpi_set_power_manageable(dev, 0);
 | |
|  
 | |
|  	/* Consume func num 1 but dont do anything with it. */
 | |
|  	if (func->num == 1)
 |