Merge "platform-drivers: msm: sps: improve robustness of SPS driver" into msm-3.0

This commit is contained in:
Linux Build Service Account
2011-12-16 14:45:07 -08:00
committed by QuIC Gerrit Code Review
4 changed files with 35 additions and 11 deletions

View File

@@ -1203,11 +1203,11 @@ exit_err:
mutex_unlock(&sps->lock);
if (result) {
if (virt_addr != NULL)
iounmap(bam->props.virt_addr);
if (bam != NULL)
if (bam != NULL) {
if (virt_addr != NULL)
iounmap(bam->props.virt_addr);
kfree(bam);
}
return result;
}

View File

@@ -634,9 +634,16 @@ void sps_bam_pipe_free(struct sps_bam *dev, u32 pipe_index)
SPS_ERR("Disconnect BAM 0x%x pipe %d with events pending",
BAM_ID(dev), pipe_index);
list_for_each_entry(sps_event, &pipe->sys.events_q, list) {
sps_event = list_entry((&pipe->sys.events_q)->next,
typeof(*sps_event), list);
while (&sps_event->list != (&pipe->sys.events_q)) {
struct sps_q_event *sps_event_delete = sps_event;
list_del(&sps_event->list);
kfree(sps_event);
sps_event = list_entry(sps_event->list.next,
typeof(*sps_event), list);
kfree(sps_event_delete);
}
}
@@ -1086,11 +1093,17 @@ int sps_bam_pipe_reg_event(struct sps_bam *dev,
continue; /* No */
index = SPS_EVENT_INDEX(opt_event_table[n].event_id);
event_reg = &pipe->sys.event_regs[index];
event_reg->xfer_done = reg->xfer_done;
event_reg->callback = reg->callback;
event_reg->mode = reg->mode;
event_reg->user = reg->user;
if (index < 0)
SPS_ERR("Negative event index: "
"BAM 0x%x pipe %d mode %d",
BAM_ID(dev), pipe_index, reg->mode);
else {
event_reg = &pipe->sys.event_regs[index];
event_reg->xfer_done = reg->xfer_done;
event_reg->callback = reg->callback;
event_reg->mode = reg->mode;
event_reg->user = reg->user;
}
}
return 0;

View File

@@ -291,6 +291,11 @@ int sps_dma_device_init(u32 h)
dev->h = h;
dev->bam = sps_h2bam(h);
if (dev->bam == NULL) {
SPS_ERR("BAM-DMA BAM device is not found from the handle.");
goto exit_err;
}
/* Map the BAM DMA device into virtual space, if necessary */
props = &dev->bam->props;
dev->phys_addr = props->periph_phys_addr;

View File

@@ -131,6 +131,12 @@ int sps_mem_init(u32 pipemem_phys_base, u32 pipemem_size)
#endif
pool = gen_pool_create(min_alloc_order, nid);
if (!pool) {
SPS_ERR("sps:Failed to create a new memory pool.\n");
return -ENOMEM;
}
#ifndef CONFIG_SPS_SUPPORT_NDP_BAM
res = gen_pool_add(pool, (u32) iomem_virt, iomem_size, nid);
if (res)