aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2013-04-23 10:36:04 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-04-25 08:38:04 -0400
commitaceb59ed3438dcb2f5c90e2f62f0f9edde4091d2 (patch)
tree5562a2fc1bb8f25a2446725a42aa82daa5548e41
parentd68b44e088caf0176cf80e7539750569d6e71ed8 (diff)
[media] exynos4-is: Fix driver name reported in vidioc_querycap
Originally struct v4l2_capability driver and card name was filled with name of the platform device. After switching to the device tree the device names have changed and now are 4 different driver names reported, depending on the video device opened. So instead of e.g. "exynos4-fimc" there is now one of: 11800000.fimc, 11810000.fimc, 11820000.fimc, 11830000.fimc. Fix this by using dev->driver_name, rather than platform device name. A common vidioc_querycap function is created for both M2M and capture video node. This fixes any breakage at user space should any application/library rely on the driver's name. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/platform/exynos4-is/fimc-capture.c11
-rw-r--r--drivers/media/platform/exynos4-is/fimc-core.c13
-rw-r--r--drivers/media/platform/exynos4-is/fimc-core.h4
-rw-r--r--drivers/media/platform/exynos4-is/fimc-m2m.c12
4 files changed, 24 insertions, 16 deletions
diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c
index 558c528d9ce1..528f41369364 100644
--- a/drivers/media/platform/exynos4-is/fimc-capture.c
+++ b/drivers/media/platform/exynos4-is/fimc-capture.c
@@ -742,16 +742,13 @@ static void fimc_capture_try_selection(struct fimc_ctx *ctx,
742/* 742/*
743 * The video node ioctl operations 743 * The video node ioctl operations
744 */ 744 */
745static int fimc_vidioc_querycap_capture(struct file *file, void *priv, 745static int fimc_cap_querycap(struct file *file, void *priv,
746 struct v4l2_capability *cap) 746 struct v4l2_capability *cap)
747{ 747{
748 struct fimc_dev *fimc = video_drvdata(file); 748 struct fimc_dev *fimc = video_drvdata(file);
749 749
750 strncpy(cap->driver, fimc->pdev->name, sizeof(cap->driver) - 1); 750 __fimc_vidioc_querycap(&fimc->pdev->dev, cap, V4L2_CAP_STREAMING |
751 strncpy(cap->card, fimc->pdev->name, sizeof(cap->card) - 1); 751 V4L2_CAP_VIDEO_CAPTURE_MPLANE);
752 cap->bus_info[0] = 0;
753 cap->capabilities = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_CAPTURE_MPLANE;
754
755 return 0; 752 return 0;
756} 753}
757 754
@@ -1375,7 +1372,7 @@ static int fimc_cap_s_selection(struct file *file, void *fh,
1375} 1372}
1376 1373
1377static const struct v4l2_ioctl_ops fimc_capture_ioctl_ops = { 1374static const struct v4l2_ioctl_ops fimc_capture_ioctl_ops = {
1378 .vidioc_querycap = fimc_vidioc_querycap_capture, 1375 .vidioc_querycap = fimc_cap_querycap,
1379 1376
1380 .vidioc_enum_fmt_vid_cap_mplane = fimc_cap_enum_fmt_mplane, 1377 .vidioc_enum_fmt_vid_cap_mplane = fimc_cap_enum_fmt_mplane,
1381 .vidioc_try_fmt_vid_cap_mplane = fimc_cap_try_fmt_mplane, 1378 .vidioc_try_fmt_vid_cap_mplane = fimc_cap_try_fmt_mplane,
diff --git a/drivers/media/platform/exynos4-is/fimc-core.c b/drivers/media/platform/exynos4-is/fimc-core.c
index a8eaad0fc612..379a5e9d52a7 100644
--- a/drivers/media/platform/exynos4-is/fimc-core.c
+++ b/drivers/media/platform/exynos4-is/fimc-core.c
@@ -213,6 +213,17 @@ struct fimc_fmt *fimc_get_format(unsigned int index)
213 return &fimc_formats[index]; 213 return &fimc_formats[index];
214} 214}
215 215
216void __fimc_vidioc_querycap(struct device *dev, struct v4l2_capability *cap,
217 unsigned int caps)
218{
219 strlcpy(cap->driver, dev->driver->name, sizeof(cap->driver));
220 strlcpy(cap->card, dev->driver->name, sizeof(cap->card));
221 snprintf(cap->bus_info, sizeof(cap->bus_info),
222 "platform:%s", dev_name(dev));
223 cap->device_caps = caps;
224 cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
225}
226
216int fimc_check_scaler_ratio(struct fimc_ctx *ctx, int sw, int sh, 227int fimc_check_scaler_ratio(struct fimc_ctx *ctx, int sw, int sh,
217 int dw, int dh, int rotation) 228 int dw, int dh, int rotation)
218{ 229{
@@ -1283,7 +1294,7 @@ static struct platform_driver fimc_driver = {
1283 .id_table = fimc_driver_ids, 1294 .id_table = fimc_driver_ids,
1284 .driver = { 1295 .driver = {
1285 .of_match_table = fimc_of_match, 1296 .of_match_table = fimc_of_match,
1286 .name = FIMC_MODULE_NAME, 1297 .name = FIMC_DRIVER_NAME,
1287 .owner = THIS_MODULE, 1298 .owner = THIS_MODULE,
1288 .pm = &fimc_pm_ops, 1299 .pm = &fimc_pm_ops,
1289 } 1300 }
diff --git a/drivers/media/platform/exynos4-is/fimc-core.h b/drivers/media/platform/exynos4-is/fimc-core.h
index 953b074d542f..539a3f71c16a 100644
--- a/drivers/media/platform/exynos4-is/fimc-core.h
+++ b/drivers/media/platform/exynos4-is/fimc-core.h
@@ -35,7 +35,7 @@
35/* Time to wait for next frame VSYNC interrupt while stopping operation. */ 35/* Time to wait for next frame VSYNC interrupt while stopping operation. */
36#define FIMC_SHUTDOWN_TIMEOUT ((100*HZ)/1000) 36#define FIMC_SHUTDOWN_TIMEOUT ((100*HZ)/1000)
37#define MAX_FIMC_CLOCKS 2 37#define MAX_FIMC_CLOCKS 2
38#define FIMC_MODULE_NAME "s5p-fimc" 38#define FIMC_DRIVER_NAME "exynos4-fimc"
39#define FIMC_MAX_DEVS 4 39#define FIMC_MAX_DEVS 4
40#define FIMC_MAX_OUT_BUFS 4 40#define FIMC_MAX_OUT_BUFS 4
41#define SCALER_MAX_HRATIO 64 41#define SCALER_MAX_HRATIO 64
@@ -620,6 +620,8 @@ static inline struct fimc_frame *ctx_get_frame(struct fimc_ctx *ctx,
620/* fimc-core.c */ 620/* fimc-core.c */
621int fimc_vidioc_enum_fmt_mplane(struct file *file, void *priv, 621int fimc_vidioc_enum_fmt_mplane(struct file *file, void *priv,
622 struct v4l2_fmtdesc *f); 622 struct v4l2_fmtdesc *f);
623void __fimc_vidioc_querycap(struct device *dev, struct v4l2_capability *cap,
624 unsigned int caps);
623int fimc_ctrls_create(struct fimc_ctx *ctx); 625int fimc_ctrls_create(struct fimc_ctx *ctx);
624void fimc_ctrls_delete(struct fimc_ctx *ctx); 626void fimc_ctrls_delete(struct fimc_ctx *ctx);
625void fimc_ctrls_activate(struct fimc_ctx *ctx, bool active); 627void fimc_ctrls_activate(struct fimc_ctx *ctx, bool active);
diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media/platform/exynos4-is/fimc-m2m.c
index 8449c0705e60..275a9f8d9fdb 100644
--- a/drivers/media/platform/exynos4-is/fimc-m2m.c
+++ b/drivers/media/platform/exynos4-is/fimc-m2m.c
@@ -249,22 +249,20 @@ static struct vb2_ops fimc_qops = {
249 * V4L2 ioctl handlers 249 * V4L2 ioctl handlers
250 */ 250 */
251static int fimc_m2m_querycap(struct file *file, void *fh, 251static int fimc_m2m_querycap(struct file *file, void *fh,
252 struct v4l2_capability *cap) 252 struct v4l2_capability *cap)
253{ 253{
254 struct fimc_ctx *ctx = fh_to_ctx(fh); 254 struct fimc_dev *fimc = video_drvdata(file);
255 struct fimc_dev *fimc = ctx->fimc_dev; 255 unsigned int caps;
256 256
257 strncpy(cap->driver, fimc->pdev->name, sizeof(cap->driver) - 1);
258 strncpy(cap->card, fimc->pdev->name, sizeof(cap->card) - 1);
259 cap->bus_info[0] = 0;
260 /* 257 /*
261 * This is only a mem-to-mem video device. The capture and output 258 * This is only a mem-to-mem video device. The capture and output
262 * device capability flags are left only for backward compatibility 259 * device capability flags are left only for backward compatibility
263 * and are scheduled for removal. 260 * and are scheduled for removal.
264 */ 261 */
265 cap->capabilities = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_M2M_MPLANE | 262 caps = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_M2M_MPLANE |
266 V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE; 263 V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE;
267 264
265 __fimc_vidioc_querycap(&fimc->pdev->dev, cap, caps);
268 return 0; 266 return 0;
269} 267}
270 268