| .. | .. |
|---|
| 27 | 27 | #include <linux/v4l2-dv-timings.h> |
|---|
| 28 | 28 | #include <linux/hdmi.h> |
|---|
| 29 | 29 | #include <linux/version.h> |
|---|
| 30 | +#include <linux/compat.h> |
|---|
| 30 | 31 | #include <linux/rk-camera-module.h> |
|---|
| 31 | 32 | #include <media/v4l2-dv-timings.h> |
|---|
| 32 | 33 | #include <media/v4l2-device.h> |
|---|
| .. | .. |
|---|
| 36 | 37 | #include <linux/regmap.h> |
|---|
| 37 | 38 | #include "lt8619c.h" |
|---|
| 38 | 39 | |
|---|
| 39 | | -#define DRIVER_VERSION KERNEL_VERSION(0, 0x1, 0x2) |
|---|
| 40 | +#define DRIVER_VERSION KERNEL_VERSION(0, 0x01, 0x02) |
|---|
| 40 | 41 | #define LT8619C_NAME "LT8619C" |
|---|
| 41 | 42 | |
|---|
| 42 | 43 | static int debug; |
|---|
| .. | .. |
|---|
| 1141 | 1142 | return 0; |
|---|
| 1142 | 1143 | } |
|---|
| 1143 | 1144 | |
|---|
| 1144 | | -static int lt8619c_g_mbus_config(struct v4l2_subdev *sd, |
|---|
| 1145 | +static int lt8619c_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad, |
|---|
| 1145 | 1146 | struct v4l2_mbus_config *cfg) |
|---|
| 1146 | 1147 | { |
|---|
| 1147 | 1148 | struct lt8619c *lt8619c = to_lt8619c(sd); |
|---|
| .. | .. |
|---|
| 1222 | 1223 | if (fie->index >= ARRAY_SIZE(supported_modes)) |
|---|
| 1223 | 1224 | return -EINVAL; |
|---|
| 1224 | 1225 | |
|---|
| 1225 | | - if (fie->code != MEDIA_BUS_FMT_UYVY8_2X8) |
|---|
| 1226 | | - return -EINVAL; |
|---|
| 1226 | + fie->code = MEDIA_BUS_FMT_UYVY8_2X8; |
|---|
| 1227 | 1227 | |
|---|
| 1228 | 1228 | fie->width = supported_modes[fie->index].width; |
|---|
| 1229 | 1229 | fie->height = supported_modes[fie->index].height; |
|---|
| .. | .. |
|---|
| 1522 | 1522 | .s_dv_timings = lt8619c_s_dv_timings, |
|---|
| 1523 | 1523 | .g_dv_timings = lt8619c_g_dv_timings, |
|---|
| 1524 | 1524 | .query_dv_timings = lt8619c_query_dv_timings, |
|---|
| 1525 | | - .g_mbus_config = lt8619c_g_mbus_config, |
|---|
| 1526 | 1525 | .s_stream = lt8619c_s_stream, |
|---|
| 1527 | 1526 | .g_frame_interval = lt8619c_g_frame_interval, |
|---|
| 1528 | 1527 | .querystd = lt8619c_querystd, |
|---|
| .. | .. |
|---|
| 1538 | 1537 | .set_edid = lt8619c_s_edid, |
|---|
| 1539 | 1538 | .enum_dv_timings = lt8619c_enum_dv_timings, |
|---|
| 1540 | 1539 | .dv_timings_cap = lt8619c_dv_timings_cap, |
|---|
| 1540 | + .get_mbus_config = lt8619c_g_mbus_config, |
|---|
| 1541 | 1541 | }; |
|---|
| 1542 | 1542 | |
|---|
| 1543 | 1543 | static const struct v4l2_subdev_ops lt8619c_ops = { |
|---|
| .. | .. |
|---|
| 1727 | 1727 | const struct i2c_device_id *id) |
|---|
| 1728 | 1728 | { |
|---|
| 1729 | 1729 | struct device *dev = &client->dev; |
|---|
| 1730 | + struct v4l2_dv_timings default_timing = |
|---|
| 1731 | + V4L2_DV_BT_CEA_640X480P59_94; |
|---|
| 1730 | 1732 | struct lt8619c *lt8619c; |
|---|
| 1731 | 1733 | struct v4l2_subdev *sd; |
|---|
| 1732 | 1734 | char facing[2]; |
|---|
| .. | .. |
|---|
| 1743 | 1745 | |
|---|
| 1744 | 1746 | sd = <8619c->sd; |
|---|
| 1745 | 1747 | lt8619c->i2c_client = client; |
|---|
| 1748 | + lt8619c->timings = default_timing; |
|---|
| 1746 | 1749 | lt8619c->cur_mode = &supported_modes[0]; |
|---|
| 1747 | 1750 | lt8619c->mbus_fmt_code = MEDIA_BUS_FMT_UYVY8_2X8; |
|---|
| 1748 | 1751 | |
|---|