projects
/
firefly-linux-kernel-4.4.55.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7fcc580
)
updata rk29 mmcdrivers/mmc/host/rk29_sdmmc.c
author
lhh
<lhh@rock-chips.com>
Sun, 23 Jan 2011 10:23:43 +0000
(18:23 +0800)
committer
lhh
<lhh@rock-chips.com>
Sun, 23 Jan 2011 10:23:43 +0000
(18:23 +0800)
drivers/mmc/host/rk29_sdmmc.c
patch
|
blob
|
history
diff --git
a/drivers/mmc/host/rk29_sdmmc.c
b/drivers/mmc/host/rk29_sdmmc.c
index 570c5b02bb069311bd97dd1dac87ee9e345df6d5..812ee390866c28f6ac5828b8514ebc6ad56eb7ab 100755
(executable)
--- a/
drivers/mmc/host/rk29_sdmmc.c
+++ b/
drivers/mmc/host/rk29_sdmmc.c
@@
-962,10
+962,8
@@
static void rk29_sdmmc_read_data_pio(struct rk29_sdmmc *host)
old_len = len;
if (likely(offset + len <= sg->length)) {
rk29_sdmmc_pull_data(host, (void *)(buf + offset),len);
old_len = len;
if (likely(offset + len <= sg->length)) {
rk29_sdmmc_pull_data(host, (void *)(buf + offset),len);
-
offset += len;
nbytes += len;
offset += len;
nbytes += len;
-
if (offset == sg->length) {
flush_dcache_page(sg_page(sg));
host->sg = sg = sg_next(sg);
if (offset == sg->length) {
flush_dcache_page(sg_page(sg));
host->sg = sg = sg_next(sg);
@@
-993,7
+991,8
@@
static void rk29_sdmmc_read_data_pio(struct rk29_sdmmc *host)
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,SDMMC_INT_RXDR); // clear RXDR interrupt
if (status & RK29_SDMMC_DATA_ERROR_FLAGS) {
host->data_status = status;
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,SDMMC_INT_RXDR); // clear RXDR interrupt
if (status & RK29_SDMMC_DATA_ERROR_FLAGS) {
host->data_status = status;
- data->bytes_xfered += nbytes;
+ if(data)
+ data->bytes_xfered += nbytes;
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_DATA_ERROR);
tasklet_schedule(&host->tasklet);
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_DATA_ERROR);
tasklet_schedule(&host->tasklet);
@@
-1003,11
+1002,13
@@
static void rk29_sdmmc_read_data_pio(struct rk29_sdmmc *host)
} while (status & SDMMC_INT_RXDR); // if the RXDR is ready let read again
len = SDMMC_GET_FCNT(rk29_sdmmc_read(host->regs, SDMMC_STATUS));
host->pio_offset = offset;
} while (status & SDMMC_INT_RXDR); // if the RXDR is ready let read again
len = SDMMC_GET_FCNT(rk29_sdmmc_read(host->regs, SDMMC_STATUS));
host->pio_offset = offset;
- data->bytes_xfered += nbytes;
+ if(data)
+ data->bytes_xfered += nbytes;
return;
done:
return;
done:
- data->bytes_xfered += nbytes;
+ if(data)
+ data->bytes_xfered += nbytes;
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_XFER_COMPLETE);
}
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_XFER_COMPLETE);
}
@@
-1057,7
+1058,8
@@
static void rk29_sdmmc_write_data_pio(struct rk29_sdmmc *host)
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,SDMMC_INT_TXDR); // clear RXDR interrupt
if (status & RK29_SDMMC_DATA_ERROR_FLAGS) {
host->data_status = status;
rk29_sdmmc_write(host->regs, SDMMC_RINTSTS,SDMMC_INT_TXDR); // clear RXDR interrupt
if (status & RK29_SDMMC_DATA_ERROR_FLAGS) {
host->data_status = status;
- data->bytes_xfered += nbytes;
+ if(data)
+ data->bytes_xfered += nbytes;
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_DATA_ERROR);
tasklet_schedule(&host->tasklet);
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_DATA_ERROR);
tasklet_schedule(&host->tasklet);
@@
-1066,12
+1068,13
@@
static void rk29_sdmmc_write_data_pio(struct rk29_sdmmc *host)
} while (status & SDMMC_INT_TXDR); // if TXDR, let write again
host->pio_offset = offset;
} while (status & SDMMC_INT_TXDR); // if TXDR, let write again
host->pio_offset = offset;
- data->bytes_xfered += nbytes;
-
+ if(data)
+ data->bytes_xfered += nbytes;
return;
done:
return;
done:
- data->bytes_xfered += nbytes;
+ if(data)
+ data->bytes_xfered += nbytes;
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_XFER_COMPLETE);
}
smp_wmb();
rk29_sdmmc_set_pending(host, EVENT_XFER_COMPLETE);
}