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

Commit ad3a7c49 authored by Franky Lin's avatar Franky Lin Committed by Greg Kroah-Hartman
Browse files

staging: brcm80211: move sdio related suspend/resume code to bus interface layer



In fullmac some SDIO configurations should be done in suspend/resume
routine. It was placed under pm ops in wl_cfg80211.c which is
inappropriate. This patchs move them to sdio layer.

Signed-off-by: default avatarArend van Spriel <arend@broadcom.com>
Reviewed-by: default avatarRoland Vossen <rvossen@broadcom.com>
Reviewed-by: default avatarFranky Lin <frankyl@broadcom.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent cb645abd
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -111,4 +111,7 @@ extern int brcmf_sdioh_reset(struct sdioh_info *si);
/* Helper function */
void *brcmf_sdcard_get_sdioh(struct brcmf_sdio *sdh);

/* Watchdog timer interface for pm ops */
extern void brcmf_sdio_wdtmr_enable(bool enable);

#endif				/* _sdio_api_h_ */
+8 −0
Original line number Diff line number Diff line
@@ -218,3 +218,11 @@ module_param(sd_msglevel, uint, 0);

extern uint sd_f2_blocksize;
module_param(sd_f2_blocksize, int, 0);

void brcmf_sdio_wdtmr_enable(bool enable)
{
	if (enable)
		brcmf_os_wd_timer(sdhcinfo->ch, brcmf_watchdog_ms);
	else
		brcmf_os_wd_timer(sdhcinfo->ch, 0);
}
+0 −7
Original line number Diff line number Diff line
@@ -55,13 +55,6 @@ DHD_PM_RESUME_WAIT_INIT(sdioh_request_buffer_wait);
int brcmf_sdioh_card_regread(struct sdioh_info *sd, int func, u32 regaddr,
			     int regsize, u32 *data);

void brcmf_sdioh_set_host_pm_flags(int flag)
{
	if (sdio_set_host_pm_flags(gInstance->func[1], flag))
		printk(KERN_ERR "%s: Failed to set pm_flags 0x%08x\n",\
			 __func__, (unsigned int)flag);
}

static int brcmf_sdioh_enablefuncs(struct sdioh_info *sd)
{
	int err_ret;
+42 −0
Original line number Diff line number Diff line
@@ -136,11 +136,53 @@ static const struct sdio_device_id bcmsdh_sdmmc_ids[] = {

MODULE_DEVICE_TABLE(sdio, bcmsdh_sdmmc_ids);

#ifdef CONFIG_PM
static int brcmf_sdio_suspend(struct device *dev)
{
	mmc_pm_flag_t sdio_flags;
	int ret = 0;

	sd_trace(("%s\n", __func__));

	sdio_flags = sdio_get_host_pm_caps(gInstance->func[1]);
	if (!(sdio_flags & MMC_PM_KEEP_POWER)) {
		sd_err(("Host can't keep power while suspended\n"));
		return -EINVAL;
	}

	ret = sdio_set_host_pm_flags(gInstance->func[1], MMC_PM_KEEP_POWER);
	if (ret) {
		sd_err(("Failed to set pm_flags\n"));
		return ret;
	}

	brcmf_sdio_wdtmr_enable(false);

	return ret;
}

static int brcmf_sdio_resume(struct device *dev)
{
	brcmf_sdio_wdtmr_enable(true);
	return 0;
}

static const struct dev_pm_ops brcmf_sdio_pm_ops = {
	.suspend	= brcmf_sdio_suspend,
	.resume		= brcmf_sdio_resume,
};
#endif		/* CONFIG_PM */

static struct sdio_driver bcmsdh_sdmmc_driver = {
	.probe = brcmf_ops_sdio_probe,
	.remove = brcmf_ops_sdio_remove,
	.name = "brcmfmac",
	.id_table = bcmsdh_sdmmc_ids,
#ifdef CONFIG_PM
	.drv = {
		.pm = &brcmf_sdio_pm_ops,
	},
#endif		/* CONFIG_PM */
};

struct sdos_info {
+0 −7
Original line number Diff line number Diff line
@@ -2382,13 +2382,6 @@ int brcmf_netdev_wait_pend8021x(struct net_device *dev)
	return pend;
}

void brcmf_netdev_os_wd_timer(struct net_device *ndev, uint wdtick)
{
	dhd_info_t *dhd = *(dhd_info_t **)netdev_priv(ndev);

	brcmf_os_wd_timer(&dhd->pub, wdtick);
}

#ifdef BCMDBG
int brcmf_write_to_file(dhd_pub_t *dhd, u8 *buf, int size)
{
Loading