Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99d7b6fd authored by Ian Molton's avatar Ian Molton Committed by Kalle Valo
Browse files

brcmfmac: Remove func0 from function array



func0 is not provided by the mmc stack as a function when probing.
Instead providing specific access functions to read/write it.

This prepares for a patch to remove the actual array entry itself.

Signed-off-by: default avatarIan Molton <ian@mnementh.co.uk>
Acked-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
[arend: rephrased the commit message]
[arend: removed unrelated comment for which separate patch is warranted]
Signed-off-by: default avatarArend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 508422f3
Loading
Loading
Loading
Loading
+1 −4
Original line number Original line Diff line number Diff line
@@ -1022,8 +1022,7 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
	/* store refs to functions used. mmc_card does
	/* store refs to functions used. mmc_card does
	 * not hold the F0 function pointer.
	 * not hold the F0 function pointer.
	 */
	 */
	sdiodev->func[0] = kmemdup(func, sizeof(*func), GFP_KERNEL);
	sdiodev->func[0] = NULL;
	sdiodev->func[0]->num = 0;
	sdiodev->func[1] = func->card->sdio_func[0];
	sdiodev->func[1] = func->card->sdio_func[0];
	sdiodev->func[2] = func;
	sdiodev->func[2] = func;


@@ -1049,7 +1048,6 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,
fail:
fail:
	dev_set_drvdata(&func->dev, NULL);
	dev_set_drvdata(&func->dev, NULL);
	dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
	dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
	kfree(sdiodev->func[0]);
	kfree(sdiodev);
	kfree(sdiodev);
	kfree(bus_if);
	kfree(bus_if);
	return err;
	return err;
@@ -1082,7 +1080,6 @@ static void brcmf_ops_sdio_remove(struct sdio_func *func)
		dev_set_drvdata(&sdiodev->func[2]->dev, NULL);
		dev_set_drvdata(&sdiodev->func[2]->dev, NULL);


		kfree(bus_if);
		kfree(bus_if);
		kfree(sdiodev->func[0]);
		kfree(sdiodev);
		kfree(sdiodev);
	}
	}


+4 −3
Original line number Original line Diff line number Diff line
@@ -3771,8 +3771,9 @@ static u32 brcmf_sdio_buscore_read32(void *ctx, u32 addr)
	u32 val, rev;
	u32 val, rev;


	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
	if ((sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||

	     sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
	if ((sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
	     sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
	     addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
	     addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
		rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
		rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
		if (rev >= 2) {
		if (rev >= 2) {
+6 −7
Original line number Original line Diff line number Diff line
@@ -21,7 +21,9 @@
#include <linux/firmware.h>
#include <linux/firmware.h>
#include "firmware.h"
#include "firmware.h"


#define SDIO_FUNC_0		0
/* Maximum number of I/O funcs */
#define NUM_SDIO_FUNCS	3

#define SDIO_FUNC_1		1
#define SDIO_FUNC_1		1
#define SDIO_FUNC_2		2
#define SDIO_FUNC_2		2


@@ -39,9 +41,6 @@
#define INTR_STATUS_FUNC1	0x2
#define INTR_STATUS_FUNC1	0x2
#define INTR_STATUS_FUNC2	0x4
#define INTR_STATUS_FUNC2	0x4


/* Maximum number of I/O funcs */
#define SDIOD_MAX_IOFUNCS	7

/* mask of register map */
/* mask of register map */
#define REG_F0_REG_MASK		0x7FF
#define REG_F0_REG_MASK		0x7FF
#define REG_F1_MISC_MASK	0x1FFFF
#define REG_F1_MISC_MASK	0x1FFFF
@@ -175,7 +174,7 @@ struct brcmf_sdio;
struct brcmf_sdiod_freezer;
struct brcmf_sdiod_freezer;


struct brcmf_sdio_dev {
struct brcmf_sdio_dev {
	struct sdio_func *func[SDIO_MAX_FUNCS];
	struct sdio_func *func[NUM_SDIO_FUNCS];
	u8 num_funcs;			/* Supported funcs on client */
	u8 num_funcs;			/* Supported funcs on client */
	u32 sbwad;			/* Save backplane window address */
	u32 sbwad;			/* Save backplane window address */
	struct brcmf_core *cc_core;	/* chipcommon core info struct */
	struct brcmf_core *cc_core;	/* chipcommon core info struct */
@@ -297,10 +296,10 @@ void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev);
/* SDIO device register access interface */
/* SDIO device register access interface */
/* Accessors for SDIO Function 0 */
/* Accessors for SDIO Function 0 */
#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
	sdio_f0_readb((sdiodev)->func[0], (addr), (r))
	sdio_f0_readb((sdiodev)->func[1], (addr), (r))


#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
	sdio_f0_writeb((sdiodev)->func[0], (v), (addr), (ret))
	sdio_f0_writeb((sdiodev)->func[1], (v), (addr), (ret))


/* Accessors for SDIO Function 1 */
/* Accessors for SDIO Function 1 */
#define brcmf_sdiod_readb(sdiodev, addr, r) \
#define brcmf_sdiod_readb(sdiodev, addr, r) \