Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab: "For a some fixes for Kernel 3.9: - subsystem build fix when VIDEO_DEV=y, VIDEO_V4L2=m and I2C=m - compilation fix for arm multiarch preventing IR_RX51 to be selected - regression fix at bttv crop logic - s5p-mfc/m5mols/exynos: a few fixes for cameras on exynos hardware" * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: [media] [REGRESSION] bt8xx: Fix too large height in cropcap [media] fix compilation with both V4L2 and I2C as 'm' [media] m5mols: Fix bug in stream on handler [media] s5p-fimc: Do not attempt to disable not enabled media pipeline [media] s5p-mfc: Fix encoder control 15 issue [media] s5p-mfc: Fix frame skip bug [media] s5p-fimc: send valid m2m ctx to fimc_m2m_job_finish [media] exynos-gsc: send valid m2m ctx to gsc_m2m_job_finish [media] fimc-lite: Fix the variable type to avoid possible crash [media] fimc-lite: Initialize 'step' field in fimc_lite_ctrl structure [media] ir: IR_RX51 only works on OMAP2
This commit is contained in:
Коммит
a7b436d356
|
@ -724,7 +724,7 @@ static int m5mols_s_stream(struct v4l2_subdev *sd, int enable)
|
|||
if (enable) {
|
||||
if (is_code(code, M5MOLS_RESTYPE_MONITOR))
|
||||
ret = m5mols_start_monitor(info);
|
||||
if (is_code(code, M5MOLS_RESTYPE_CAPTURE))
|
||||
else if (is_code(code, M5MOLS_RESTYPE_CAPTURE))
|
||||
ret = m5mols_start_capture(info);
|
||||
else
|
||||
ret = -EINVAL;
|
||||
|
|
|
@ -250,17 +250,19 @@ static u8 SRAM_Table[][60] =
|
|||
vdelay start of active video in 2 * field lines relative to
|
||||
trailing edge of /VRESET pulse (VDELAY register).
|
||||
sheight height of active video in 2 * field lines.
|
||||
extraheight Added to sheight for cropcap.bounds.height only
|
||||
videostart0 ITU-R frame line number of the line corresponding
|
||||
to vdelay in the first field. */
|
||||
#define CROPCAP(minhdelayx1, hdelayx1, swidth, totalwidth, sqwidth, \
|
||||
vdelay, sheight, videostart0) \
|
||||
vdelay, sheight, extraheight, videostart0) \
|
||||
.cropcap.bounds.left = minhdelayx1, \
|
||||
/* * 2 because vertically we count field lines times two, */ \
|
||||
/* e.g. 23 * 2 to 23 * 2 + 576 in PAL-BGHI defrect. */ \
|
||||
.cropcap.bounds.top = (videostart0) * 2 - (vdelay) + MIN_VDELAY, \
|
||||
/* 4 is a safety margin at the end of the line. */ \
|
||||
.cropcap.bounds.width = (totalwidth) - (minhdelayx1) - 4, \
|
||||
.cropcap.bounds.height = (sheight) + (vdelay) - MIN_VDELAY, \
|
||||
.cropcap.bounds.height = (sheight) + (extraheight) + (vdelay) - \
|
||||
MIN_VDELAY, \
|
||||
.cropcap.defrect.left = hdelayx1, \
|
||||
.cropcap.defrect.top = (videostart0) * 2, \
|
||||
.cropcap.defrect.width = swidth, \
|
||||
|
@ -301,9 +303,10 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* totalwidth */ 1135,
|
||||
/* sqwidth */ 944,
|
||||
/* vdelay */ 0x20,
|
||||
/* bt878 (and bt848?) can capture another
|
||||
line below active video. */
|
||||
/* sheight */ (576 + 2) + 0x20 - 2,
|
||||
/* sheight */ 576,
|
||||
/* bt878 (and bt848?) can capture another
|
||||
line below active video. */
|
||||
/* extraheight */ 2,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
.v4l2_id = V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR,
|
||||
|
@ -330,6 +333,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 780,
|
||||
/* vdelay */ 0x1a,
|
||||
/* sheight */ 480,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
.v4l2_id = V4L2_STD_SECAM,
|
||||
|
@ -355,6 +359,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 944,
|
||||
/* vdelay */ 0x20,
|
||||
/* sheight */ 576,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
.v4l2_id = V4L2_STD_PAL_Nc,
|
||||
|
@ -380,6 +385,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 780,
|
||||
/* vdelay */ 0x1a,
|
||||
/* sheight */ 576,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
.v4l2_id = V4L2_STD_PAL_M,
|
||||
|
@ -405,6 +411,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 780,
|
||||
/* vdelay */ 0x1a,
|
||||
/* sheight */ 480,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
.v4l2_id = V4L2_STD_PAL_N,
|
||||
|
@ -430,6 +437,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 944,
|
||||
/* vdelay */ 0x20,
|
||||
/* sheight */ 576,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
.v4l2_id = V4L2_STD_NTSC_M_JP,
|
||||
|
@ -455,6 +463,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 780,
|
||||
/* vdelay */ 0x16,
|
||||
/* sheight */ 480,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
},{
|
||||
/* that one hopefully works with the strange timing
|
||||
|
@ -484,6 +493,7 @@ const struct bttv_tvnorm bttv_tvnorms[] = {
|
|||
/* sqwidth */ 944,
|
||||
/* vdelay */ 0x1a,
|
||||
/* sheight */ 480,
|
||||
/* extraheight */ 0,
|
||||
/* videostart0 */ 23)
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1054,16 +1054,18 @@ static int gsc_m2m_suspend(struct gsc_dev *gsc)
|
|||
|
||||
static int gsc_m2m_resume(struct gsc_dev *gsc)
|
||||
{
|
||||
struct gsc_ctx *ctx;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&gsc->slock, flags);
|
||||
/* Clear for full H/W setup in first run after resume */
|
||||
ctx = gsc->m2m.ctx;
|
||||
gsc->m2m.ctx = NULL;
|
||||
spin_unlock_irqrestore(&gsc->slock, flags);
|
||||
|
||||
if (test_and_clear_bit(ST_M2M_SUSPENDED, &gsc->state))
|
||||
gsc_m2m_job_finish(gsc->m2m.ctx,
|
||||
VB2_BUF_STATE_ERROR);
|
||||
gsc_m2m_job_finish(ctx, VB2_BUF_STATE_ERROR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1204,7 +1206,7 @@ static int gsc_resume(struct device *dev)
|
|||
/* Do not resume if the device was idle before system suspend */
|
||||
spin_lock_irqsave(&gsc->slock, flags);
|
||||
if (!test_and_clear_bit(ST_SUSPEND, &gsc->state) ||
|
||||
!gsc_m2m_active(gsc)) {
|
||||
!gsc_m2m_opened(gsc)) {
|
||||
spin_unlock_irqrestore(&gsc->slock, flags);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -850,16 +850,18 @@ static int fimc_m2m_suspend(struct fimc_dev *fimc)
|
|||
|
||||
static int fimc_m2m_resume(struct fimc_dev *fimc)
|
||||
{
|
||||
struct fimc_ctx *ctx;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&fimc->slock, flags);
|
||||
/* Clear for full H/W setup in first run after resume */
|
||||
ctx = fimc->m2m.ctx;
|
||||
fimc->m2m.ctx = NULL;
|
||||
spin_unlock_irqrestore(&fimc->slock, flags);
|
||||
|
||||
if (test_and_clear_bit(ST_M2M_SUSPENDED, &fimc->state))
|
||||
fimc_m2m_job_finish(fimc->m2m.ctx,
|
||||
VB2_BUF_STATE_ERROR);
|
||||
fimc_m2m_job_finish(ctx, VB2_BUF_STATE_ERROR);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -128,10 +128,10 @@ static const u32 src_pixfmt_map[8][3] = {
|
|||
void flite_hw_set_source_format(struct fimc_lite *dev, struct flite_frame *f)
|
||||
{
|
||||
enum v4l2_mbus_pixelcode pixelcode = dev->fmt->mbus_code;
|
||||
unsigned int i = ARRAY_SIZE(src_pixfmt_map);
|
||||
int i = ARRAY_SIZE(src_pixfmt_map);
|
||||
u32 cfg;
|
||||
|
||||
while (i-- >= 0) {
|
||||
while (--i >= 0) {
|
||||
if (src_pixfmt_map[i][0] == pixelcode)
|
||||
break;
|
||||
}
|
||||
|
@ -224,9 +224,9 @@ static void flite_hw_set_out_order(struct fimc_lite *dev, struct flite_frame *f)
|
|||
{ V4L2_MBUS_FMT_VYUY8_2X8, FLITE_REG_CIODMAFMT_CRYCBY },
|
||||
};
|
||||
u32 cfg = readl(dev->regs + FLITE_REG_CIODMAFMT);
|
||||
unsigned int i = ARRAY_SIZE(pixcode);
|
||||
int i = ARRAY_SIZE(pixcode);
|
||||
|
||||
while (i-- >= 0)
|
||||
while (--i >= 0)
|
||||
if (pixcode[i][0] == dev->fmt->mbus_code)
|
||||
break;
|
||||
cfg &= ~FLITE_REG_CIODMAFMT_YCBCR_ORDER_MASK;
|
||||
|
|
|
@ -1408,6 +1408,7 @@ static const struct v4l2_ctrl_config fimc_lite_ctrl = {
|
|||
.id = V4L2_CTRL_CLASS_USER | 0x1001,
|
||||
.type = V4L2_CTRL_TYPE_BOOLEAN,
|
||||
.name = "Test Pattern 640x480",
|
||||
.step = 1,
|
||||
};
|
||||
|
||||
static int fimc_lite_create_capture_subdev(struct fimc_lite *fimc)
|
||||
|
|
|
@ -827,7 +827,7 @@ static int fimc_md_link_notify(struct media_pad *source,
|
|||
struct fimc_pipeline *pipeline;
|
||||
struct v4l2_subdev *sd;
|
||||
struct mutex *lock;
|
||||
int ret = 0;
|
||||
int i, ret = 0;
|
||||
int ref_count;
|
||||
|
||||
if (media_entity_type(sink->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
|
||||
|
@ -854,29 +854,28 @@ static int fimc_md_link_notify(struct media_pad *source,
|
|||
return 0;
|
||||
}
|
||||
|
||||
mutex_lock(lock);
|
||||
ref_count = fimc ? fimc->vid_cap.refcnt : fimc_lite->ref_count;
|
||||
|
||||
if (!(flags & MEDIA_LNK_FL_ENABLED)) {
|
||||
int i;
|
||||
mutex_lock(lock);
|
||||
ret = __fimc_pipeline_close(pipeline);
|
||||
if (ref_count > 0) {
|
||||
ret = __fimc_pipeline_close(pipeline);
|
||||
if (!ret && fimc)
|
||||
fimc_ctrls_delete(fimc->vid_cap.ctx);
|
||||
}
|
||||
for (i = 0; i < IDX_MAX; i++)
|
||||
pipeline->subdevs[i] = NULL;
|
||||
if (fimc)
|
||||
fimc_ctrls_delete(fimc->vid_cap.ctx);
|
||||
mutex_unlock(lock);
|
||||
return ret;
|
||||
} else if (ref_count > 0) {
|
||||
/*
|
||||
* Link activation. Enable power of pipeline elements only if
|
||||
* the pipeline is already in use, i.e. its video node is open.
|
||||
* Recreate the controls destroyed during the link deactivation.
|
||||
*/
|
||||
ret = __fimc_pipeline_open(pipeline,
|
||||
source->entity, true);
|
||||
if (!ret && fimc)
|
||||
ret = fimc_capture_ctrls_create(fimc);
|
||||
}
|
||||
/*
|
||||
* Link activation. Enable power of pipeline elements only if the
|
||||
* pipeline is already in use, i.e. its video node is opened.
|
||||
* Recreate the controls destroyed during the link deactivation.
|
||||
*/
|
||||
mutex_lock(lock);
|
||||
|
||||
ref_count = fimc ? fimc->vid_cap.refcnt : fimc_lite->ref_count;
|
||||
if (ref_count > 0)
|
||||
ret = __fimc_pipeline_open(pipeline, source->entity, true);
|
||||
if (!ret && fimc)
|
||||
ret = fimc_capture_ctrls_create(fimc);
|
||||
|
||||
mutex_unlock(lock);
|
||||
return ret ? -EPIPE : ret;
|
||||
|
|
|
@ -276,7 +276,7 @@ static void s5p_mfc_handle_frame_new(struct s5p_mfc_ctx *ctx, unsigned int err)
|
|||
unsigned int frame_type;
|
||||
|
||||
dspl_y_addr = s5p_mfc_hw_call(dev->mfc_ops, get_dspl_y_adr, dev);
|
||||
frame_type = s5p_mfc_hw_call(dev->mfc_ops, get_dec_frame_type, dev);
|
||||
frame_type = s5p_mfc_hw_call(dev->mfc_ops, get_disp_frame_type, ctx);
|
||||
|
||||
/* If frame is same as previous then skip and do not dequeue */
|
||||
if (frame_type == S5P_FIMV_DECODE_FRAME_SKIPPED) {
|
||||
|
|
|
@ -232,6 +232,7 @@ static struct mfc_control controls[] = {
|
|||
.minimum = 0,
|
||||
.maximum = 1,
|
||||
.default_value = 0,
|
||||
.step = 1,
|
||||
.menu_skip_mask = 0,
|
||||
},
|
||||
{
|
||||
|
|
|
@ -291,7 +291,7 @@ config IR_TTUSBIR
|
|||
|
||||
config IR_RX51
|
||||
tristate "Nokia N900 IR transmitter diode"
|
||||
depends on OMAP_DM_TIMER && LIRC && !ARCH_MULTIPLATFORM
|
||||
depends on OMAP_DM_TIMER && ARCH_OMAP2PLUS && LIRC && !ARCH_MULTIPLATFORM
|
||||
---help---
|
||||
Say Y or M here if you want to enable support for the IR
|
||||
transmitter diode built in the Nokia N900 (RX51) device.
|
||||
|
|
|
@ -10,7 +10,7 @@ ifeq ($(CONFIG_COMPAT),y)
|
|||
videodev-objs += v4l2-compat-ioctl32.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_VIDEO_DEV) += videodev.o
|
||||
obj-$(CONFIG_VIDEO_V4L2) += videodev.o
|
||||
obj-$(CONFIG_VIDEO_V4L2_INT_DEVICE) += v4l2-int-device.o
|
||||
obj-$(CONFIG_VIDEO_V4L2) += v4l2-common.o
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче