Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 357426
b: refs/heads/master
c: 03878bb
h: refs/heads/master
v: v3
  • Loading branch information
Sylwester Nawrocki authored and Mauro Carvalho Chehab committed Feb 5, 2013
1 parent d2a2719 commit d84667d
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 81b9f70210b62e256cf63eb8f703042ef44e4cdd
refs/heads/master: 03878bb473bb46cf8514223d8c955420b1ef73bc
2 changes: 1 addition & 1 deletion trunk/drivers/media/platform/s5p-fimc/fimc-lite-reg.c
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ void flite_hw_set_interrupt_mask(struct fimc_lite *dev)
u32 cfg, intsrc;

/* Select interrupts to be enabled for each output mode */
if (dev->out_path == FIMC_IO_DMA) {
if (atomic_read(&dev->out_path) == FIMC_IO_DMA) {
intsrc = FLITE_REG_CIGCTRL_IRQ_OVFEN |
FLITE_REG_CIGCTRL_IRQ_LASTEN |
FLITE_REG_CIGCTRL_IRQ_STARTEN;
Expand Down
35 changes: 19 additions & 16 deletions trunk/drivers/media/platform/s5p-fimc/fimc-lite.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ static irqreturn_t flite_irq_handler(int irq, void *priv)
wake_up(&fimc->irq_queue);
}

if (fimc->out_path != FIMC_IO_DMA)
if (atomic_read(&fimc->out_path) != FIMC_IO_DMA)
goto done;

if ((intsrc & FLITE_REG_CISTATUS_IRQ_SRC_FRMSTART) &&
Expand Down Expand Up @@ -465,7 +465,7 @@ static int fimc_lite_open(struct file *file)
mutex_lock(&me->parent->graph_mutex);

mutex_lock(&fimc->lock);
if (fimc->out_path != FIMC_IO_DMA) {
if (atomic_read(&fimc->out_path) != FIMC_IO_DMA) {
ret = -EBUSY;
goto done;
}
Expand All @@ -479,7 +479,8 @@ static int fimc_lite_open(struct file *file)
if (ret < 0)
goto done;

if (++fimc->ref_count == 1 && fimc->out_path == FIMC_IO_DMA) {
if (++fimc->ref_count == 1 &&
atomic_read(&fimc->out_path) == FIMC_IO_DMA) {
ret = fimc_pipeline_call(fimc, open, &fimc->pipeline,
&fimc->vfd.entity, true);
if (ret < 0) {
Expand All @@ -504,7 +505,8 @@ static int fimc_lite_close(struct file *file)

mutex_lock(&fimc->lock);

if (--fimc->ref_count == 0 && fimc->out_path == FIMC_IO_DMA) {
if (--fimc->ref_count == 0 &&
atomic_read(&fimc->out_path) == FIMC_IO_DMA) {
clear_bit(ST_FLITE_IN_USE, &fimc->state);
fimc_lite_stop_capture(fimc, false);
fimc_pipeline_call(fimc, close, &fimc->pipeline);
Expand Down Expand Up @@ -1034,18 +1036,18 @@ static int fimc_lite_link_setup(struct media_entity *entity,

case FLITE_SD_PAD_SOURCE_DMA:
if (!(flags & MEDIA_LNK_FL_ENABLED))
fimc->out_path = FIMC_IO_NONE;
atomic_set(&fimc->out_path, FIMC_IO_NONE);
else if (remote_ent_type == MEDIA_ENT_T_DEVNODE)
fimc->out_path = FIMC_IO_DMA;
atomic_set(&fimc->out_path, FIMC_IO_DMA);
else
ret = -EINVAL;
break;

case FLITE_SD_PAD_SOURCE_ISP:
if (!(flags & MEDIA_LNK_FL_ENABLED))
fimc->out_path = FIMC_IO_NONE;
atomic_set(&fimc->out_path, FIMC_IO_NONE);
else if (remote_ent_type == MEDIA_ENT_T_V4L2_SUBDEV)
fimc->out_path = FIMC_IO_ISP;
atomic_set(&fimc->out_path, FIMC_IO_ISP);
else
ret = -EINVAL;
break;
Expand All @@ -1054,6 +1056,7 @@ static int fimc_lite_link_setup(struct media_entity *entity,
v4l2_err(sd, "Invalid pad index\n");
ret = -EINVAL;
}
mb();

mutex_unlock(&fimc->lock);
return ret;
Expand Down Expand Up @@ -1123,8 +1126,10 @@ static int fimc_lite_subdev_set_fmt(struct v4l2_subdev *sd,
mf->colorspace = V4L2_COLORSPACE_JPEG;
mutex_lock(&fimc->lock);

if ((fimc->out_path == FIMC_IO_ISP && sd->entity.stream_count > 0) ||
(fimc->out_path == FIMC_IO_DMA && vb2_is_busy(&fimc->vb_queue))) {
if ((atomic_read(&fimc->out_path) == FIMC_IO_ISP &&
sd->entity.stream_count > 0) ||
(atomic_read(&fimc->out_path) == FIMC_IO_DMA &&
vb2_is_busy(&fimc->vb_queue))) {
mutex_unlock(&fimc->lock);
return -EBUSY;
}
Expand Down Expand Up @@ -1247,12 +1252,10 @@ static int fimc_lite_subdev_s_stream(struct v4l2_subdev *sd, int on)
*/
fimc->sensor = __find_remote_sensor(&sd->entity);

mutex_lock(&fimc->lock);
if (fimc->out_path != FIMC_IO_ISP) {
mutex_unlock(&fimc->lock);
if (atomic_read(&fimc->out_path) != FIMC_IO_ISP)
return -ENOIOCTLCMD;
}

mutex_lock(&fimc->lock);
if (on) {
flite_hw_reset(fimc);
ret = fimc_lite_hw_init(fimc, true);
Expand Down Expand Up @@ -1298,7 +1301,7 @@ static int fimc_lite_subdev_registered(struct v4l2_subdev *sd)
memset(vfd, 0, sizeof(*vfd));

fimc->fmt = &fimc_lite_formats[0];
fimc->out_path = FIMC_IO_DMA;
atomic_set(&fimc->out_path, FIMC_IO_DMA);

snprintf(vfd->name, sizeof(vfd->name), "fimc-lite.%d.capture",
fimc->index);
Expand Down Expand Up @@ -1589,7 +1592,7 @@ static int fimc_lite_resume(struct device *dev)
INIT_LIST_HEAD(&fimc->active_buf_q);
fimc_pipeline_call(fimc, open, &fimc->pipeline,
&fimc->vfd.entity, false);
fimc_lite_hw_init(fimc, fimc->out_path == FIMC_IO_ISP);
fimc_lite_hw_init(fimc, atomic_read(&fimc->out_path) == FIMC_IO_ISP);
clear_bit(ST_FLITE_SUSPENDED, &fimc->state);

for (i = 0; i < fimc->reqbufs_count; i++) {
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/media/platform/s5p-fimc/fimc-lite.h
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ struct fimc_lite {
unsigned long payload[FLITE_MAX_PLANES];
struct flite_frame inp_frame;
struct flite_frame out_frame;
enum fimc_datapath out_path;
atomic_t out_path;
unsigned int source_subdev_grp_id;

unsigned long state;
Expand Down

0 comments on commit d84667d

Please sign in to comment.