Merge branch 'patchwork' into v4l_for_linus
* patchwork: (544 commits) [media] ir-hix5hd2: fix build on c6x arch [media] pt3: fix DTV FE I2C driver load error paths Revert "[media] media: em28xx - remove reset_resume interface" [media] exynos4-is: fix some warnings when compiling on arm64 [media] usb drivers: use %zu instead of %zd [media] pci drivers: use %zu instead of %zd [media] dvb-frontends: use %zu instead of %zd [media] s5p-mfc: Fix several printk warnings [media] s5p_mfc_opr: Fix warnings [media] ti-vpe: Fix typecast [media] s3c-camif: fix dma_addr_t printks [media] s5p_mfc_opr_v6: get rid of warnings when compiled with 64 bits [media] s5p_mfc_opr_v5: Fix lots of warnings on x86_64 [media] em28xx: Fix identation [media] drxd: remove a dead code [media] saa7146: remove return after BUG() [media] cx88: remove return after BUG() [media] cx88: fix cards table CodingStyle [media] radio-sf16fmr2: declare some structs as static [media] radio-sf16fmi: declare pnp_attached as static ... Conflicts: Documentation/DocBook/media/v4l/compat.xml
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef ADV7343_REG_H
|
||||
#ifndef ADV7343_REGS_H
|
||||
#define ADV7343_REGS_H
|
||||
|
||||
struct adv7343_std_info {
|
||||
|
@@ -1593,7 +1593,7 @@ static int adv7604_query_dv_timings(struct v4l2_subdev *sd,
|
||||
bt->height += hdmi_read16(sd, 0x0b, 0xfff);
|
||||
bt->il_vfrontporch = hdmi_read16(sd, 0x2c, 0x1fff) / 2;
|
||||
bt->il_vsync = hdmi_read16(sd, 0x30, 0x1fff) / 2;
|
||||
bt->vbackporch = hdmi_read16(sd, 0x34, 0x1fff) / 2;
|
||||
bt->il_vbackporch = hdmi_read16(sd, 0x34, 0x1fff) / 2;
|
||||
}
|
||||
adv7604_fill_optional_dv_timings_fields(sd, timings);
|
||||
} else {
|
||||
|
@@ -1435,6 +1435,8 @@ static int adv7842_query_dv_timings(struct v4l2_subdev *sd,
|
||||
|
||||
v4l2_dbg(1, debug, sd, "%s:\n", __func__);
|
||||
|
||||
memset(timings, 0, sizeof(struct v4l2_dv_timings));
|
||||
|
||||
/* SDP block */
|
||||
if (state->mode == ADV7842_MODE_SDP)
|
||||
return -ENODATA;
|
||||
@@ -1483,7 +1485,7 @@ static int adv7842_query_dv_timings(struct v4l2_subdev *sd,
|
||||
hdmi_read(sd, 0x2d)) / 2;
|
||||
bt->il_vsync = ((hdmi_read(sd, 0x30) & 0x1f) * 256 +
|
||||
hdmi_read(sd, 0x31)) / 2;
|
||||
bt->vbackporch = ((hdmi_read(sd, 0x34) & 0x1f) * 256 +
|
||||
bt->il_vbackporch = ((hdmi_read(sd, 0x34) & 0x1f) * 256 +
|
||||
hdmi_read(sd, 0x35)) / 2;
|
||||
}
|
||||
adv7842_fill_optional_dv_timings_fields(sd, timings);
|
||||
|
@@ -224,7 +224,7 @@ static inline unsigned int lpf_count_to_us(unsigned int count)
|
||||
}
|
||||
|
||||
/*
|
||||
* FIFO register pulse width count compuations
|
||||
* FIFO register pulse width count computations
|
||||
*/
|
||||
static u32 clock_divider_to_resolution(u16 divider)
|
||||
{
|
||||
|
@@ -100,14 +100,14 @@ static int lm3560_enable_ctrl(struct lm3560_flash *flash,
|
||||
int rval;
|
||||
|
||||
if (led_no == LM3560_LED0) {
|
||||
if (on == true)
|
||||
if (on)
|
||||
rval = regmap_update_bits(flash->regmap,
|
||||
REG_ENABLE, 0x08, 0x08);
|
||||
else
|
||||
rval = regmap_update_bits(flash->regmap,
|
||||
REG_ENABLE, 0x08, 0x00);
|
||||
} else {
|
||||
if (on == true)
|
||||
if (on)
|
||||
rval = regmap_update_bits(flash->regmap,
|
||||
REG_ENABLE, 0x10, 0x10);
|
||||
else
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-mediabus.h>
|
||||
#include <media/v4l2-image-sizes.h>
|
||||
#include <media/ov7670.h>
|
||||
|
||||
MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
|
||||
@@ -29,19 +30,6 @@ static bool debug;
|
||||
module_param(debug, bool, 0644);
|
||||
MODULE_PARM_DESC(debug, "Debug level (0-1)");
|
||||
|
||||
/*
|
||||
* Basic window sizes. These probably belong somewhere more globally
|
||||
* useful.
|
||||
*/
|
||||
#define VGA_WIDTH 640
|
||||
#define VGA_HEIGHT 480
|
||||
#define QVGA_WIDTH 320
|
||||
#define QVGA_HEIGHT 240
|
||||
#define CIF_WIDTH 352
|
||||
#define CIF_HEIGHT 288
|
||||
#define QCIF_WIDTH 176
|
||||
#define QCIF_HEIGHT 144
|
||||
|
||||
/*
|
||||
* The 7670 sits on i2c with ID 0x42
|
||||
*/
|
||||
|
@@ -816,7 +816,7 @@ static void s5k5baf_hw_find_min_fiv(struct s5k5baf *state)
|
||||
"error setting frame interval: %d\n", err);
|
||||
state->error = -EINVAL;
|
||||
}
|
||||
};
|
||||
}
|
||||
v4l2_err(&state->sd, "cannot find correct frame interval\n");
|
||||
state->error = -ERANGE;
|
||||
}
|
||||
|
@@ -660,7 +660,7 @@ static const struct v4l2_subdev_ops saa6752hs_ops = {
|
||||
static int saa6752hs_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct saa6752hs_state *h = kzalloc(sizeof(*h), GFP_KERNEL);
|
||||
struct saa6752hs_state *h;
|
||||
struct v4l2_subdev *sd;
|
||||
struct v4l2_ctrl_handler *hdl;
|
||||
u8 addr = 0x13;
|
||||
@@ -668,6 +668,8 @@ static int saa6752hs_probe(struct i2c_client *client,
|
||||
|
||||
v4l_info(client, "chip found @ 0x%x (%s)\n",
|
||||
client->addr << 1, client->adapter->name);
|
||||
|
||||
h = devm_kzalloc(&client->dev, sizeof(*h), GFP_KERNEL);
|
||||
if (h == NULL)
|
||||
return -ENOMEM;
|
||||
sd = &h->sd;
|
||||
@@ -752,7 +754,6 @@ static int saa6752hs_probe(struct i2c_client *client,
|
||||
int err = hdl->error;
|
||||
|
||||
v4l2_ctrl_handler_free(hdl);
|
||||
kfree(h);
|
||||
return err;
|
||||
}
|
||||
v4l2_ctrl_cluster(3, &h->video_bitrate_mode);
|
||||
@@ -767,7 +768,6 @@ static int saa6752hs_remove(struct i2c_client *client)
|
||||
|
||||
v4l2_device_unregister_subdev(sd);
|
||||
v4l2_ctrl_handler_free(&to_state(sd)->hdl);
|
||||
kfree(to_state(sd));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -31,8 +31,9 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/smiapp.h>
|
||||
#include <linux/v4l2-mediabus.h>
|
||||
#include <media/v4l2-device.h>
|
||||
|
||||
@@ -297,8 +298,9 @@ static int smiapp_pll_update(struct smiapp_sensor *sensor)
|
||||
if (rval < 0)
|
||||
return rval;
|
||||
|
||||
*sensor->pixel_rate_parray->p_cur.p_s64 = pll->vt_pix_clk_freq_hz;
|
||||
*sensor->pixel_rate_csi->p_cur.p_s64 = pll->pixel_rate_csi;
|
||||
__v4l2_ctrl_s_ctrl_int64(sensor->pixel_rate_parray,
|
||||
pll->vt_pix_clk_freq_hz);
|
||||
__v4l2_ctrl_s_ctrl_int64(sensor->pixel_rate_csi, pll->pixel_rate_csi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -319,13 +321,7 @@ static void __smiapp_update_exposure_limits(struct smiapp_sensor *sensor)
|
||||
+ sensor->vblank->val
|
||||
- sensor->limits[SMIAPP_LIMIT_COARSE_INTEGRATION_TIME_MAX_MARGIN];
|
||||
|
||||
ctrl->maximum = max;
|
||||
if (ctrl->default_value > max)
|
||||
ctrl->default_value = max;
|
||||
if (ctrl->val > max)
|
||||
ctrl->val = max;
|
||||
if (ctrl->cur.val > max)
|
||||
ctrl->cur.val = max;
|
||||
__v4l2_ctrl_modify_range(ctrl, ctrl->minimum, max, ctrl->step, max);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -404,6 +400,14 @@ static void smiapp_update_mbus_formats(struct smiapp_sensor *sensor)
|
||||
pixel_order_str[pixel_order]);
|
||||
}
|
||||
|
||||
static const char * const smiapp_test_patterns[] = {
|
||||
"Disabled",
|
||||
"Solid Colour",
|
||||
"Eight Vertical Colour Bars",
|
||||
"Colour Bars With Fade to Grey",
|
||||
"Pseudorandom Sequence (PN9)",
|
||||
};
|
||||
|
||||
static int smiapp_set_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct smiapp_sensor *sensor =
|
||||
@@ -477,6 +481,39 @@ static int smiapp_set_ctrl(struct v4l2_ctrl *ctrl)
|
||||
|
||||
return smiapp_pll_update(sensor);
|
||||
|
||||
case V4L2_CID_TEST_PATTERN: {
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++)
|
||||
v4l2_ctrl_activate(
|
||||
sensor->test_data[i],
|
||||
ctrl->val ==
|
||||
V4L2_SMIAPP_TEST_PATTERN_MODE_SOLID_COLOUR);
|
||||
|
||||
return smiapp_write(
|
||||
sensor, SMIAPP_REG_U16_TEST_PATTERN_MODE, ctrl->val);
|
||||
}
|
||||
|
||||
case V4L2_CID_TEST_PATTERN_RED:
|
||||
return smiapp_write(
|
||||
sensor, SMIAPP_REG_U16_TEST_DATA_RED, ctrl->val);
|
||||
|
||||
case V4L2_CID_TEST_PATTERN_GREENR:
|
||||
return smiapp_write(
|
||||
sensor, SMIAPP_REG_U16_TEST_DATA_GREENR, ctrl->val);
|
||||
|
||||
case V4L2_CID_TEST_PATTERN_BLUE:
|
||||
return smiapp_write(
|
||||
sensor, SMIAPP_REG_U16_TEST_DATA_BLUE, ctrl->val);
|
||||
|
||||
case V4L2_CID_TEST_PATTERN_GREENB:
|
||||
return smiapp_write(
|
||||
sensor, SMIAPP_REG_U16_TEST_DATA_GREENB, ctrl->val);
|
||||
|
||||
case V4L2_CID_PIXEL_RATE:
|
||||
/* For v4l2_ctrl_s_ctrl_int64() used internally. */
|
||||
return 0;
|
||||
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -489,10 +526,10 @@ static const struct v4l2_ctrl_ops smiapp_ctrl_ops = {
|
||||
static int smiapp_init_controls(struct smiapp_sensor *sensor)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(&sensor->src->sd);
|
||||
unsigned int max;
|
||||
unsigned int max, i;
|
||||
int rval;
|
||||
|
||||
rval = v4l2_ctrl_handler_init(&sensor->pixel_array->ctrl_handler, 7);
|
||||
rval = v4l2_ctrl_handler_init(&sensor->pixel_array->ctrl_handler, 12);
|
||||
if (rval)
|
||||
return rval;
|
||||
sensor->pixel_array->ctrl_handler.lock = &sensor->mutex;
|
||||
@@ -535,6 +572,20 @@ static int smiapp_init_controls(struct smiapp_sensor *sensor)
|
||||
&sensor->pixel_array->ctrl_handler, &smiapp_ctrl_ops,
|
||||
V4L2_CID_PIXEL_RATE, 1, INT_MAX, 1, 1);
|
||||
|
||||
v4l2_ctrl_new_std_menu_items(&sensor->pixel_array->ctrl_handler,
|
||||
&smiapp_ctrl_ops, V4L2_CID_TEST_PATTERN,
|
||||
ARRAY_SIZE(smiapp_test_patterns) - 1,
|
||||
0, 0, smiapp_test_patterns);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++) {
|
||||
int max_value = (1 << sensor->csi_format->width) - 1;
|
||||
sensor->test_data[i] =
|
||||
v4l2_ctrl_new_std(
|
||||
&sensor->pixel_array->ctrl_handler,
|
||||
&smiapp_ctrl_ops, V4L2_CID_TEST_PATTERN_RED + i,
|
||||
0, max_value, 1, max_value);
|
||||
}
|
||||
|
||||
if (sensor->pixel_array->ctrl_handler.error) {
|
||||
dev_err(&client->dev,
|
||||
"pixel array controls initialization failed (%d)\n",
|
||||
@@ -782,36 +833,25 @@ static void smiapp_update_blanking(struct smiapp_sensor *sensor)
|
||||
{
|
||||
struct v4l2_ctrl *vblank = sensor->vblank;
|
||||
struct v4l2_ctrl *hblank = sensor->hblank;
|
||||
int min, max;
|
||||
|
||||
vblank->minimum =
|
||||
max_t(int,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_FRAME_BLANKING_LINES],
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES_BIN] -
|
||||
sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height);
|
||||
vblank->maximum =
|
||||
sensor->limits[SMIAPP_LIMIT_MAX_FRAME_LENGTH_LINES_BIN] -
|
||||
min = max_t(int,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_FRAME_BLANKING_LINES],
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_FRAME_LENGTH_LINES_BIN] -
|
||||
sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height);
|
||||
max = sensor->limits[SMIAPP_LIMIT_MAX_FRAME_LENGTH_LINES_BIN] -
|
||||
sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].height;
|
||||
|
||||
vblank->val = clamp_t(int, vblank->val,
|
||||
vblank->minimum, vblank->maximum);
|
||||
vblank->default_value = vblank->minimum;
|
||||
vblank->val = vblank->val;
|
||||
vblank->cur.val = vblank->val;
|
||||
__v4l2_ctrl_modify_range(vblank, min, max, vblank->step, min);
|
||||
|
||||
hblank->minimum =
|
||||
max_t(int,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK_BIN] -
|
||||
sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_LINE_BLANKING_PCK_BIN]);
|
||||
hblank->maximum =
|
||||
sensor->limits[SMIAPP_LIMIT_MAX_LINE_LENGTH_PCK_BIN] -
|
||||
min = max_t(int,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_LINE_LENGTH_PCK_BIN] -
|
||||
sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_LINE_BLANKING_PCK_BIN]);
|
||||
max = sensor->limits[SMIAPP_LIMIT_MAX_LINE_LENGTH_PCK_BIN] -
|
||||
sensor->pixel_array->crop[SMIAPP_PA_PAD_SRC].width;
|
||||
|
||||
hblank->val = clamp_t(int, hblank->val,
|
||||
hblank->minimum, hblank->maximum);
|
||||
hblank->default_value = hblank->minimum;
|
||||
hblank->val = hblank->val;
|
||||
hblank->cur.val = hblank->val;
|
||||
__v4l2_ctrl_modify_range(hblank, min, max, hblank->step, min);
|
||||
|
||||
__smiapp_update_exposure_limits(sensor);
|
||||
}
|
||||
@@ -1272,7 +1312,7 @@ static void smiapp_power_off(struct smiapp_sensor *sensor)
|
||||
clk_disable_unprepare(sensor->ext_clk);
|
||||
usleep_range(5000, 5000);
|
||||
regulator_disable(sensor->vana);
|
||||
sensor->streaming = 0;
|
||||
sensor->streaming = false;
|
||||
}
|
||||
|
||||
static int smiapp_set_power(struct v4l2_subdev *subdev, int on)
|
||||
@@ -1462,13 +1502,13 @@ static int smiapp_set_stream(struct v4l2_subdev *subdev, int enable)
|
||||
return 0;
|
||||
|
||||
if (enable) {
|
||||
sensor->streaming = 1;
|
||||
sensor->streaming = true;
|
||||
rval = smiapp_start_streaming(sensor);
|
||||
if (rval < 0)
|
||||
sensor->streaming = 0;
|
||||
sensor->streaming = false;
|
||||
} else {
|
||||
rval = smiapp_stop_streaming(sensor);
|
||||
sensor->streaming = 0;
|
||||
sensor->streaming = false;
|
||||
}
|
||||
|
||||
return rval;
|
||||
@@ -1664,17 +1704,34 @@ static int smiapp_set_format(struct v4l2_subdev *subdev,
|
||||
if (fmt->pad == ssd->source_pad) {
|
||||
u32 code = fmt->format.code;
|
||||
int rval = __smiapp_get_format(subdev, fh, fmt);
|
||||
bool range_changed = false;
|
||||
unsigned int i;
|
||||
|
||||
if (!rval && subdev == &sensor->src->sd) {
|
||||
const struct smiapp_csi_data_format *csi_format =
|
||||
smiapp_validate_csi_data_format(sensor, code);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
|
||||
if (csi_format->width !=
|
||||
sensor->csi_format->width)
|
||||
range_changed = true;
|
||||
|
||||
sensor->csi_format = csi_format;
|
||||
}
|
||||
|
||||
fmt->format.code = csi_format->code;
|
||||
}
|
||||
|
||||
mutex_unlock(&sensor->mutex);
|
||||
return rval;
|
||||
if (rval || !range_changed)
|
||||
return rval;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sensor->test_data); i++)
|
||||
v4l2_ctrl_modify_range(
|
||||
sensor->test_data[i],
|
||||
0, (1 << sensor->csi_format->width) - 1, 1, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Sink pad. Width and height are changeable here. */
|
||||
|
@@ -54,6 +54,8 @@
|
||||
(1000 + (SMIAPP_RESET_DELAY_CLOCKS * 1000 \
|
||||
+ (clk) / 1000 - 1) / ((clk) / 1000))
|
||||
|
||||
#define SMIAPP_COLOUR_COMPONENTS 4
|
||||
|
||||
#include "smiapp-limits.h"
|
||||
|
||||
struct smiapp_quirk;
|
||||
@@ -241,6 +243,8 @@ struct smiapp_sensor {
|
||||
/* src controls */
|
||||
struct v4l2_ctrl *link_freq;
|
||||
struct v4l2_ctrl *pixel_rate_csi;
|
||||
/* test pattern colour components */
|
||||
struct v4l2_ctrl *test_data[SMIAPP_COLOUR_COMPONENTS];
|
||||
};
|
||||
|
||||
#define to_smiapp_subdev(_sd) \
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include <media/soc_camera.h>
|
||||
#include <media/v4l2-clk.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-image-sizes.h>
|
||||
|
||||
/* you can check PLL/clock info */
|
||||
/* #define EXT_CLOCK 24000000 */
|
||||
@@ -42,9 +43,6 @@
|
||||
#define MAX_WIDTH 2048
|
||||
#define MAX_HEIGHT 1536
|
||||
|
||||
#define VGA_WIDTH 640
|
||||
#define VGA_HEIGHT 480
|
||||
|
||||
/*
|
||||
* macro of read/write
|
||||
*/
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include <media/v4l2-clk.h>
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-subdev.h>
|
||||
#include <media/v4l2-image-sizes.h>
|
||||
|
||||
/*
|
||||
* register offset
|
||||
@@ -360,10 +361,6 @@
|
||||
#define SCAL0_ACTRL 0x08 /* Auto scaling factor control */
|
||||
#define SCAL1_2_ACTRL 0x04 /* Auto scaling factor control */
|
||||
|
||||
#define VGA_WIDTH 640
|
||||
#define VGA_HEIGHT 480
|
||||
#define QVGA_WIDTH 320
|
||||
#define QVGA_HEIGHT 240
|
||||
#define OV772X_MAX_WIDTH VGA_WIDTH
|
||||
#define OV772X_MAX_HEIGHT VGA_HEIGHT
|
||||
|
||||
|
@@ -564,13 +564,13 @@ static int ov9740_set_res(struct i2c_client *client, u32 width, u32 height)
|
||||
u32 y_start;
|
||||
u32 x_end;
|
||||
u32 y_end;
|
||||
bool scaling = 0;
|
||||
bool scaling = false;
|
||||
u32 scale_input_x;
|
||||
u32 scale_input_y;
|
||||
int ret;
|
||||
|
||||
if ((width != OV9740_MAX_WIDTH) || (height != OV9740_MAX_HEIGHT))
|
||||
scaling = 1;
|
||||
scaling = true;
|
||||
|
||||
/*
|
||||
* Try to use as much of the sensor area as possible when supporting
|
||||
|
@@ -293,7 +293,7 @@ static int tda7432_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
if (t->mute->val) {
|
||||
lf |= TDA7432_MUTE;
|
||||
lr |= TDA7432_MUTE;
|
||||
lf |= TDA7432_MUTE;
|
||||
rf |= TDA7432_MUTE;
|
||||
rr |= TDA7432_MUTE;
|
||||
}
|
||||
/* Mute & update balance*/
|
||||
|
@@ -775,25 +775,20 @@ static int tvp7002_enum_mbus_fmt(struct v4l2_subdev *sd, unsigned index,
|
||||
static int tvp7002_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
{
|
||||
struct tvp7002 *device = to_tvp7002(sd);
|
||||
int error = 0;
|
||||
int error;
|
||||
|
||||
if (device->streaming == enable)
|
||||
return 0;
|
||||
|
||||
if (enable) {
|
||||
/* Set output state on (low impedance means stream on) */
|
||||
error = tvp7002_write(sd, TVP7002_MISC_CTL_2, 0x00);
|
||||
device->streaming = enable;
|
||||
} else {
|
||||
/* Set output state off (high impedance means stream off) */
|
||||
error = tvp7002_write(sd, TVP7002_MISC_CTL_2, 0x03);
|
||||
if (error)
|
||||
v4l2_dbg(1, debug, sd, "Unable to stop streaming\n");
|
||||
|
||||
device->streaming = enable;
|
||||
/* low impedance: on, high impedance: off */
|
||||
error = tvp7002_write(sd, TVP7002_MISC_CTL_2, enable ? 0x00 : 0x03);
|
||||
if (error) {
|
||||
v4l2_dbg(1, debug, sd, "Fail to set streaming\n");
|
||||
return error;
|
||||
}
|
||||
|
||||
return error;
|
||||
device->streaming = enable;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -30,22 +30,10 @@
|
||||
#include <media/v4l2-ctrls.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-mediabus.h>
|
||||
#include <media/v4l2-image-sizes.h>
|
||||
|
||||
#include "vs6624_regs.h"
|
||||
|
||||
#define VGA_WIDTH 640
|
||||
#define VGA_HEIGHT 480
|
||||
#define QVGA_WIDTH 320
|
||||
#define QVGA_HEIGHT 240
|
||||
#define QQVGA_WIDTH 160
|
||||
#define QQVGA_HEIGHT 120
|
||||
#define CIF_WIDTH 352
|
||||
#define CIF_HEIGHT 288
|
||||
#define QCIF_WIDTH 176
|
||||
#define QCIF_HEIGHT 144
|
||||
#define QQCIF_WIDTH 88
|
||||
#define QQCIF_HEIGHT 72
|
||||
|
||||
#define MAX_FRAME_RATE 30
|
||||
|
||||
struct vs6624 {
|
||||
|
Reference in New Issue
Block a user