staging: brcm80211: remove static function declaration in bcmsdh_sdmmc
Reshuffle function order in bcmsdh_sdmmc of fullmac to get rid of static function declaration Reported-by: Johannes Berg <johannes@sipsolutions.net> Reviewed-by: Roland Vossen <rvossen@broadcom.com> Reviewed-by: Arend van Spriel <arend@broadcom.com> Signed-off-by: Roland Vossen <rvossen@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b0dea9c07c
commit
bc4fbdadc1
@@ -40,16 +40,6 @@
|
|||||||
|
|
||||||
#define SDIO_DEVICE_ID_BROADCOM_4329 0x4329
|
#define SDIO_DEVICE_ID_BROADCOM_4329 0x4329
|
||||||
|
|
||||||
static int brcmf_sdioh_get_cisaddr(struct brcmf_sdio_dev *sdiodev, u32 regaddr);
|
|
||||||
static int brcmf_ops_sdio_probe(struct sdio_func *func,
|
|
||||||
const struct sdio_device_id *id);
|
|
||||||
static void brcmf_ops_sdio_remove(struct sdio_func *func);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
|
||||||
static int brcmf_sdio_suspend(struct device *dev);
|
|
||||||
static int brcmf_sdio_resume(struct device *dev);
|
|
||||||
#endif /* CONFIG_PM */
|
|
||||||
|
|
||||||
uint sd_f2_blocksize = 512; /* Default blocksize */
|
uint sd_f2_blocksize = 512; /* Default blocksize */
|
||||||
|
|
||||||
/* devices we support, null terminated */
|
/* devices we support, null terminated */
|
||||||
@@ -57,26 +47,6 @@ static const struct sdio_device_id brcmf_sdmmc_ids[] = {
|
|||||||
{SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4329)},
|
{SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4329)},
|
||||||
{ /* end: all zeroes */ },
|
{ /* end: all zeroes */ },
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
|
||||||
static const struct dev_pm_ops brcmf_sdio_pm_ops = {
|
|
||||||
.suspend = brcmf_sdio_suspend,
|
|
||||||
.resume = brcmf_sdio_resume,
|
|
||||||
};
|
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
|
||||||
|
|
||||||
static struct sdio_driver brcmf_sdmmc_driver = {
|
|
||||||
.probe = brcmf_ops_sdio_probe,
|
|
||||||
.remove = brcmf_ops_sdio_remove,
|
|
||||||
.name = "brcmfmac",
|
|
||||||
.id_table = brcmf_sdmmc_ids,
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
|
||||||
.drv = {
|
|
||||||
.pm = &brcmf_sdio_pm_ops,
|
|
||||||
},
|
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
|
||||||
};
|
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);
|
MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids);
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
@@ -86,10 +56,6 @@ DECLARE_WAIT_QUEUE_HEAD(sdioh_request_packet_wait);
|
|||||||
DECLARE_WAIT_QUEUE_HEAD(sdioh_request_buffer_wait);
|
DECLARE_WAIT_QUEUE_HEAD(sdioh_request_buffer_wait);
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
#endif /* CONFIG_PM_SLEEP */
|
||||||
|
|
||||||
static int
|
|
||||||
brcmf_sdioh_card_regread(struct brcmf_sdio_dev *sdiodev, int func, u32 regaddr,
|
|
||||||
int regsize, u32 *data);
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
brcmf_pm_resume_error(struct brcmf_sdio_dev *sdiodev)
|
brcmf_pm_resume_error(struct brcmf_sdio_dev *sdiodev)
|
||||||
{
|
{
|
||||||
@@ -110,145 +76,6 @@ brcmf_pm_resume_wait(struct brcmf_sdio_dev *sdiodev, wait_queue_head_t wq)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int brcmf_sdioh_enablefuncs(struct brcmf_sdio_dev *sdiodev)
|
|
||||||
{
|
|
||||||
int err_ret;
|
|
||||||
u32 fbraddr;
|
|
||||||
u8 func;
|
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "\n");
|
|
||||||
|
|
||||||
/* Get the Card's common CIS address */
|
|
||||||
sdiodev->func_cis_ptr[0] = brcmf_sdioh_get_cisaddr(sdiodev,
|
|
||||||
SDIO_CCCR_CIS);
|
|
||||||
brcmf_dbg(INFO, "Card's Common CIS Ptr = 0x%x\n",
|
|
||||||
sdiodev->func_cis_ptr[0]);
|
|
||||||
|
|
||||||
/* Get the Card's function CIS (for each function) */
|
|
||||||
for (fbraddr = SDIO_FBR_BASE(1), func = 1;
|
|
||||||
func <= sdiodev->num_funcs; func++, fbraddr += SDIOD_FBR_SIZE) {
|
|
||||||
sdiodev->func_cis_ptr[func] =
|
|
||||||
brcmf_sdioh_get_cisaddr(sdiodev, SDIO_FBR_CIS + fbraddr);
|
|
||||||
brcmf_dbg(INFO, "Function %d CIS Ptr = 0x%x\n",
|
|
||||||
func, sdiodev->func_cis_ptr[func]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable Function 1 */
|
|
||||||
sdio_claim_host(sdiodev->func[1]);
|
|
||||||
err_ret = sdio_enable_func(sdiodev->func[1]);
|
|
||||||
sdio_release_host(sdiodev->func[1]);
|
|
||||||
if (err_ret)
|
|
||||||
brcmf_dbg(ERROR, "Failed to enable F1 Err: 0x%08x\n", err_ret);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Public entry points & extern's
|
|
||||||
*/
|
|
||||||
int brcmf_sdioh_attach(struct brcmf_sdio_dev *sdiodev)
|
|
||||||
{
|
|
||||||
int err_ret = 0;
|
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "\n");
|
|
||||||
|
|
||||||
sdiodev->num_funcs = 2;
|
|
||||||
|
|
||||||
sdio_claim_host(sdiodev->func[1]);
|
|
||||||
err_ret = sdio_set_block_size(sdiodev->func[1], 64);
|
|
||||||
sdio_release_host(sdiodev->func[1]);
|
|
||||||
if (err_ret) {
|
|
||||||
brcmf_dbg(ERROR, "Failed to set F1 blocksize\n");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
sdio_claim_host(sdiodev->func[2]);
|
|
||||||
err_ret = sdio_set_block_size(sdiodev->func[2], sd_f2_blocksize);
|
|
||||||
sdio_release_host(sdiodev->func[2]);
|
|
||||||
if (err_ret) {
|
|
||||||
brcmf_dbg(ERROR, "Failed to set F2 blocksize to %d\n",
|
|
||||||
sd_f2_blocksize);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
brcmf_sdioh_enablefuncs(sdiodev);
|
|
||||||
|
|
||||||
out:
|
|
||||||
brcmf_dbg(TRACE, "Done\n");
|
|
||||||
return err_ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void brcmf_sdioh_detach(struct brcmf_sdio_dev *sdiodev)
|
|
||||||
{
|
|
||||||
brcmf_dbg(TRACE, "\n");
|
|
||||||
|
|
||||||
/* Disable Function 2 */
|
|
||||||
sdio_claim_host(sdiodev->func[2]);
|
|
||||||
sdio_disable_func(sdiodev->func[2]);
|
|
||||||
sdio_release_host(sdiodev->func[2]);
|
|
||||||
|
|
||||||
/* Disable Function 1 */
|
|
||||||
sdio_claim_host(sdiodev->func[1]);
|
|
||||||
sdio_disable_func(sdiodev->func[1]);
|
|
||||||
sdio_release_host(sdiodev->func[1]);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static int brcmf_sdioh_get_cisaddr(struct brcmf_sdio_dev *sdiodev, u32 regaddr)
|
|
||||||
{
|
|
||||||
/* read 24 bits and return valid 17 bit addr */
|
|
||||||
int i;
|
|
||||||
u32 scratch, regdata;
|
|
||||||
u8 *ptr = (u8 *)&scratch;
|
|
||||||
for (i = 0; i < 3; i++) {
|
|
||||||
if ((brcmf_sdioh_card_regread(sdiodev, 0, regaddr, 1,
|
|
||||||
®data)) != SUCCESS)
|
|
||||||
brcmf_dbg(ERROR, "Can't read!\n");
|
|
||||||
|
|
||||||
*ptr++ = (u8) regdata;
|
|
||||||
regaddr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Only the lower 17-bits are valid */
|
|
||||||
scratch = le32_to_cpu(scratch);
|
|
||||||
scratch &= 0x0001FFFF;
|
|
||||||
return scratch;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int
|
|
||||||
brcmf_sdioh_cis_read(struct brcmf_sdio_dev *sdiodev, uint func,
|
|
||||||
u8 *cisd, u32 length)
|
|
||||||
{
|
|
||||||
u32 count;
|
|
||||||
int offset;
|
|
||||||
u32 foo;
|
|
||||||
u8 *cis = cisd;
|
|
||||||
|
|
||||||
brcmf_dbg(TRACE, "Func = %d\n", func);
|
|
||||||
|
|
||||||
if (!sdiodev->func_cis_ptr[func]) {
|
|
||||||
memset(cis, 0, length);
|
|
||||||
brcmf_dbg(ERROR, "no func_cis_ptr[%d]\n", func);
|
|
||||||
return -ENOTSUPP;
|
|
||||||
}
|
|
||||||
|
|
||||||
brcmf_dbg(ERROR, "func_cis_ptr[%d]=0x%04x\n",
|
|
||||||
func, sdiodev->func_cis_ptr[func]);
|
|
||||||
|
|
||||||
for (count = 0; count < length; count++) {
|
|
||||||
offset = sdiodev->func_cis_ptr[func] + count;
|
|
||||||
if (brcmf_sdioh_card_regread(sdiodev, 0, offset, 1, &foo) < 0) {
|
|
||||||
brcmf_dbg(ERROR, "regread failed: Can't read CIS\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
*cis = (u8) (foo & 0xff);
|
|
||||||
cis++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
brcmf_sdioh_request_byte(struct brcmf_sdio_dev *sdiodev, uint rw, uint func,
|
brcmf_sdioh_request_byte(struct brcmf_sdio_dev *sdiodev, uint rw, uint func,
|
||||||
uint regaddr, u8 *byte)
|
uint regaddr, u8 *byte)
|
||||||
@@ -577,6 +404,145 @@ brcmf_sdioh_card_regread(struct brcmf_sdio_dev *sdiodev, int func, u32 regaddr,
|
|||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int brcmf_sdioh_get_cisaddr(struct brcmf_sdio_dev *sdiodev, u32 regaddr)
|
||||||
|
{
|
||||||
|
/* read 24 bits and return valid 17 bit addr */
|
||||||
|
int i;
|
||||||
|
u32 scratch, regdata;
|
||||||
|
u8 *ptr = (u8 *)&scratch;
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
if ((brcmf_sdioh_card_regread(sdiodev, 0, regaddr, 1,
|
||||||
|
®data)) != SUCCESS)
|
||||||
|
brcmf_dbg(ERROR, "Can't read!\n");
|
||||||
|
|
||||||
|
*ptr++ = (u8) regdata;
|
||||||
|
regaddr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only the lower 17-bits are valid */
|
||||||
|
scratch = le32_to_cpu(scratch);
|
||||||
|
scratch &= 0x0001FFFF;
|
||||||
|
return scratch;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int
|
||||||
|
brcmf_sdioh_cis_read(struct brcmf_sdio_dev *sdiodev, uint func,
|
||||||
|
u8 *cisd, u32 length)
|
||||||
|
{
|
||||||
|
u32 count;
|
||||||
|
int offset;
|
||||||
|
u32 foo;
|
||||||
|
u8 *cis = cisd;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "Func = %d\n", func);
|
||||||
|
|
||||||
|
if (!sdiodev->func_cis_ptr[func]) {
|
||||||
|
memset(cis, 0, length);
|
||||||
|
brcmf_dbg(ERROR, "no func_cis_ptr[%d]\n", func);
|
||||||
|
return -ENOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
|
brcmf_dbg(ERROR, "func_cis_ptr[%d]=0x%04x\n",
|
||||||
|
func, sdiodev->func_cis_ptr[func]);
|
||||||
|
|
||||||
|
for (count = 0; count < length; count++) {
|
||||||
|
offset = sdiodev->func_cis_ptr[func] + count;
|
||||||
|
if (brcmf_sdioh_card_regread(sdiodev, 0, offset, 1, &foo) < 0) {
|
||||||
|
brcmf_dbg(ERROR, "regread failed: Can't read CIS\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
*cis = (u8) (foo & 0xff);
|
||||||
|
cis++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int brcmf_sdioh_enablefuncs(struct brcmf_sdio_dev *sdiodev)
|
||||||
|
{
|
||||||
|
int err_ret;
|
||||||
|
u32 fbraddr;
|
||||||
|
u8 func;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "\n");
|
||||||
|
|
||||||
|
/* Get the Card's common CIS address */
|
||||||
|
sdiodev->func_cis_ptr[0] = brcmf_sdioh_get_cisaddr(sdiodev,
|
||||||
|
SDIO_CCCR_CIS);
|
||||||
|
brcmf_dbg(INFO, "Card's Common CIS Ptr = 0x%x\n",
|
||||||
|
sdiodev->func_cis_ptr[0]);
|
||||||
|
|
||||||
|
/* Get the Card's function CIS (for each function) */
|
||||||
|
for (fbraddr = SDIO_FBR_BASE(1), func = 1;
|
||||||
|
func <= sdiodev->num_funcs; func++, fbraddr += SDIOD_FBR_SIZE) {
|
||||||
|
sdiodev->func_cis_ptr[func] =
|
||||||
|
brcmf_sdioh_get_cisaddr(sdiodev, SDIO_FBR_CIS + fbraddr);
|
||||||
|
brcmf_dbg(INFO, "Function %d CIS Ptr = 0x%x\n",
|
||||||
|
func, sdiodev->func_cis_ptr[func]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Enable Function 1 */
|
||||||
|
sdio_claim_host(sdiodev->func[1]);
|
||||||
|
err_ret = sdio_enable_func(sdiodev->func[1]);
|
||||||
|
sdio_release_host(sdiodev->func[1]);
|
||||||
|
if (err_ret)
|
||||||
|
brcmf_dbg(ERROR, "Failed to enable F1 Err: 0x%08x\n", err_ret);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Public entry points & extern's
|
||||||
|
*/
|
||||||
|
int brcmf_sdioh_attach(struct brcmf_sdio_dev *sdiodev)
|
||||||
|
{
|
||||||
|
int err_ret = 0;
|
||||||
|
|
||||||
|
brcmf_dbg(TRACE, "\n");
|
||||||
|
|
||||||
|
sdiodev->num_funcs = 2;
|
||||||
|
|
||||||
|
sdio_claim_host(sdiodev->func[1]);
|
||||||
|
err_ret = sdio_set_block_size(sdiodev->func[1], 64);
|
||||||
|
sdio_release_host(sdiodev->func[1]);
|
||||||
|
if (err_ret) {
|
||||||
|
brcmf_dbg(ERROR, "Failed to set F1 blocksize\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
sdio_claim_host(sdiodev->func[2]);
|
||||||
|
err_ret = sdio_set_block_size(sdiodev->func[2], sd_f2_blocksize);
|
||||||
|
sdio_release_host(sdiodev->func[2]);
|
||||||
|
if (err_ret) {
|
||||||
|
brcmf_dbg(ERROR, "Failed to set F2 blocksize to %d\n",
|
||||||
|
sd_f2_blocksize);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
brcmf_sdioh_enablefuncs(sdiodev);
|
||||||
|
|
||||||
|
out:
|
||||||
|
brcmf_dbg(TRACE, "Done\n");
|
||||||
|
return err_ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void brcmf_sdioh_detach(struct brcmf_sdio_dev *sdiodev)
|
||||||
|
{
|
||||||
|
brcmf_dbg(TRACE, "\n");
|
||||||
|
|
||||||
|
/* Disable Function 2 */
|
||||||
|
sdio_claim_host(sdiodev->func[2]);
|
||||||
|
sdio_disable_func(sdiodev->func[2]);
|
||||||
|
sdio_release_host(sdiodev->func[2]);
|
||||||
|
|
||||||
|
/* Disable Function 1 */
|
||||||
|
sdio_claim_host(sdiodev->func[1]);
|
||||||
|
sdio_disable_func(sdiodev->func[1]);
|
||||||
|
sdio_release_host(sdiodev->func[1]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static int brcmf_ops_sdio_probe(struct sdio_func *func,
|
static int brcmf_ops_sdio_probe(struct sdio_func *func,
|
||||||
const struct sdio_device_id *id)
|
const struct sdio_device_id *id)
|
||||||
{
|
{
|
||||||
@@ -635,7 +601,6 @@ static void brcmf_ops_sdio_remove(struct sdio_func *func)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
static int brcmf_sdio_suspend(struct device *dev)
|
static int brcmf_sdio_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
@@ -677,8 +642,25 @@ static int brcmf_sdio_resume(struct device *dev)
|
|||||||
atomic_set(&sdiodev->suspend, false);
|
atomic_set(&sdiodev->suspend, false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct dev_pm_ops brcmf_sdio_pm_ops = {
|
||||||
|
.suspend = brcmf_sdio_suspend,
|
||||||
|
.resume = brcmf_sdio_resume,
|
||||||
|
};
|
||||||
#endif /* CONFIG_PM_SLEEP */
|
#endif /* CONFIG_PM_SLEEP */
|
||||||
|
|
||||||
|
static struct sdio_driver brcmf_sdmmc_driver = {
|
||||||
|
.probe = brcmf_ops_sdio_probe,
|
||||||
|
.remove = brcmf_ops_sdio_remove,
|
||||||
|
.name = "brcmfmac",
|
||||||
|
.id_table = brcmf_sdmmc_ids,
|
||||||
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
.drv = {
|
||||||
|
.pm = &brcmf_sdio_pm_ops,
|
||||||
|
},
|
||||||
|
#endif /* CONFIG_PM_SLEEP */
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* module init
|
* module init
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user