summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAjitpal.Singh <ajitpal.singh@stericsson.com>2012-02-29 15:14:12 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:36 +0200
commitbd4fb12f5688a2991d78208dda9826aeba1769be (patch)
tree49b9daa83d0f1362d8f755d9e03d08206c8367b5
parent2f60d34aa23fc9dd795b0a6df18bd3879b6154b5 (diff)
cw1200: Set better block size for SDIO
Changing default SDIO block size used to 512. Helps in less overhead on SDIO bus. ST-Ericsson ID: 357764 ST-Ericsson FOSS-OUT ID: NA Change-Id: I6cd1384ab5cff308f533b85b50d3396396cc4f3a Signed-off-by: Ajitpal.Singh <ajitpal.singh@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/32913 Reviewed-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com> Tested-by: Bartosz MARKOWSKI <bartosz.markowski@tieto.com>
-rw-r--r--drivers/staging/cw1200/bh.c2
-rw-r--r--drivers/staging/cw1200/bh.h4
-rw-r--r--drivers/staging/cw1200/cw1200_sdio.c12
-rw-r--r--drivers/staging/cw1200/main.c4
-rw-r--r--drivers/staging/cw1200/sbus.h1
5 files changed, 12 insertions, 11 deletions
diff --git a/drivers/staging/cw1200/bh.c b/drivers/staging/cw1200/bh.c
index 978e97592ce..ff6b85edfb7 100644
--- a/drivers/staging/cw1200/bh.c
+++ b/drivers/staging/cw1200/bh.c
@@ -346,8 +346,6 @@ rx:
* to the NEXT Message length + 2 Bytes for SKB */
read_len = read_len + 2;
- BUG_ON(SDIO_BLOCK_SIZE & (SDIO_BLOCK_SIZE - 1));
-
#if defined(CONFIG_CW1200_NON_POWER_OF_TWO_BLOCKSIZES)
alloc_len = priv->sbus_ops->align_size(
priv->sbus_priv, read_len);
diff --git a/drivers/staging/cw1200/bh.h b/drivers/staging/cw1200/bh.h
index 6d4d27b18c5..ea4598afc43 100644
--- a/drivers/staging/cw1200/bh.h
+++ b/drivers/staging/cw1200/bh.h
@@ -14,9 +14,7 @@
/* extern */ struct cw1200_common;
-/* TODO: 512, actually. Was increased to 1024
- * for compatibility with particular FW. */
-#define SDIO_BLOCK_SIZE (1024)
+#define SDIO_BLOCK_SIZE (512)
int cw1200_register_bh(struct cw1200_common *priv);
void cw1200_unregister_bh(struct cw1200_common *priv);
diff --git a/drivers/staging/cw1200/cw1200_sdio.c b/drivers/staging/cw1200/cw1200_sdio.c
index cd432655bff..dffa8879b93 100644
--- a/drivers/staging/cw1200/cw1200_sdio.c
+++ b/drivers/staging/cw1200/cw1200_sdio.c
@@ -274,15 +274,14 @@ static int cw1200_sdio_reset(struct sbus_priv *self)
static size_t cw1200_sdio_align_size(struct sbus_priv *self, size_t size)
{
size_t aligned = sdio_align_size(self->func, size);
- /* HACK!!! Problems with DMA size on u8500 platform */
- if ((aligned & 0x1F) && (aligned & ~0x1F)) {
- aligned &= ~0x1F;
- aligned += 0x20;
- }
-
return aligned;
}
+int cw1200_sdio_set_block_size(struct sbus_priv *self, size_t size)
+{
+ return sdio_set_block_size(self->func, size);
+}
+
static int cw1200_sdio_pm(struct sbus_priv *self, bool suspend)
{
int ret;
@@ -312,6 +311,7 @@ static struct sbus_ops cw1200_sdio_sbus_ops = {
.reset = cw1200_sdio_reset,
.align_size = cw1200_sdio_align_size,
.power_mgmt = cw1200_sdio_pm,
+ .set_block_size = cw1200_sdio_set_block_size,
};
/* Probe Function to be called by SDIO stack when device is discovered */
diff --git a/drivers/staging/cw1200/main.c b/drivers/staging/cw1200/main.c
index ffc43592141..e57519aa3fb 100644
--- a/drivers/staging/cw1200/main.c
+++ b/drivers/staging/cw1200/main.c
@@ -498,6 +498,10 @@ int cw1200_core_probe(const struct sbus_ops *sbus_ops,
err = cw1200_load_firmware(priv);
if (err)
goto err2;
+ priv->sbus_ops->lock(priv->sbus_priv);
+ WARN_ON(priv->sbus_ops->set_block_size(priv->sbus_priv,
+ SDIO_BLOCK_SIZE));
+ priv->sbus_ops->unlock(priv->sbus_priv);
if (wait_event_interruptible_timeout(priv->wsm_startup_done,
priv->wsm_caps.firmwareReady, 3*HZ) <= 0) {
diff --git a/drivers/staging/cw1200/sbus.h b/drivers/staging/cw1200/sbus.h
index a911ef1a0e6..49bd06d20e5 100644
--- a/drivers/staging/cw1200/sbus.h
+++ b/drivers/staging/cw1200/sbus.h
@@ -33,6 +33,7 @@ struct sbus_ops {
int (*reset)(struct sbus_priv *self);
size_t (*align_size)(struct sbus_priv *self, size_t size);
int (*power_mgmt)(struct sbus_priv *self, bool suspend);
+ int (*set_block_size)(struct sbus_priv *self, size_t size);
};
#endif /* CW1200_SBUS_H */