diff options
| author | Gautham Mayyuri <gmayyuri@codeaurora.org> | 2016-04-28 19:55:14 -0700 |
|---|---|---|
| committer | Jeevan Shriram <jshriram@codeaurora.org> | 2016-05-05 15:05:45 -0700 |
| commit | 74fff772f8009af31883db9c02df9d6cfcf1b82d (patch) | |
| tree | 7ae75df93561576bda66fc338a70d220a395687b | |
| parent | 4379b4d614646ba37247af518b274e560511cd89 (diff) | |
msm: jpeg: Expose JPEG DMA max downscale to user space
This change will retrieve JPEG DMA max downscale factor
from dtsi and expose it to user space.
CRs-Fixed: 1009871
Change-Id: I57496aeb47d907f540a25c854ef7b35c6b5ab399
Signed-off-by: Gautham Mayyuri <gmayyuri@codeaurora.org>
5 files changed, 51 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/media/video/msm-jpegdma.txt b/Documentation/devicetree/bindings/media/video/msm-jpegdma.txt index 6b05e7fa3084..a1d604218219 100644 --- a/Documentation/devicetree/bindings/media/video/msm-jpegdma.txt +++ b/Documentation/devicetree/bindings/media/video/msm-jpegdma.txt @@ -19,6 +19,8 @@ Required properties: - clocks : clocks required for the device. - qcom,clock-rates: should specify clock rates in Hz to each clocks property defined. +- qcom,max-ds-factor: should specify the max dma downscale factor, + supported by HW. - Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for below optional properties: - qcom,msm-bus,name @@ -67,5 +69,6 @@ Example: qcom,msm-bus,num-paths = <1>; qcom,msm-bus,vectors-KBps = <62 512 0 0>, <62 512 666675 666675>; + qcom,max-ds-factor = <128>; status = "ok"; }; diff --git a/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_dev.c b/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_dev.c index 2f84ff95a38a..57e389b4c497 100644 --- a/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_dev.c +++ b/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_dev.c @@ -1075,6 +1075,30 @@ static int msm_jpegdma_s_parm(struct file *file, void *fh, return 0; } +/* + * msm_fd_g_ctrl - V4l2 ioctl get control. + * @file: Pointer to file struct. + * @fh: V4l2 File handle. + * @sub: Pointer to v4l2_control struct need to be filled. + */ +static int msm_jpegdma_g_ctrl(struct file *file, void *fh, + struct v4l2_control *a) +{ + struct jpegdma_ctx *ctx = msm_jpegdma_ctx_from_fh(fh); + + switch (a->id) { + case V4L2_CID_JPEG_DMA_MAX_DOWN_SCALE: + a->value = msm_jpegdma_hw_get_max_downscale(ctx->jdma_device); + if (a->value < 0) + return -EINVAL; + break; + default: + return -EINVAL; + } + + return 0; +} + /* V4l2 ioctl handlers */ static const struct v4l2_ioctl_ops fd_ioctl_ops = { .vidioc_querycap = msm_jpegdma_querycap, @@ -1096,6 +1120,7 @@ static const struct v4l2_ioctl_ops fd_ioctl_ops = { .vidioc_s_crop = msm_jpegdma_s_crop, .vidioc_g_parm = msm_jpegdma_g_parm, .vidioc_s_parm = msm_jpegdma_s_parm, + .vidioc_g_ctrl = msm_jpegdma_g_ctrl, }; /* diff --git a/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.c b/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.c index e994ce1b8b32..0a871c342fb4 100644 --- a/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.c +++ b/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.c @@ -1366,6 +1366,25 @@ int msm_jpegdma_hw_get_mem_resources(struct platform_device *pdev, } /* + * msm_jpegdma_hw_get_max_downscale - Get max downscale factor from dtsi. + * @dma: Pointer to dma device. + */ +int msm_jpegdma_hw_get_max_downscale(struct msm_jpegdma_device *dma) +{ + int ret; + int max_ds_factor; + + ret = of_property_read_u32(dma->dev->of_node, + "qcom,max-ds-factor", &max_ds_factor); + if (ret < 0) { + dev_err(dma->dev, "cannot read qcom,max-ds-factor from dtsi\n"); + return ret; + } + dev_dbg(dma->dev, "max_ds_factor is %d\n", max_ds_factor); + return max_ds_factor; +} + +/* * msm_jpegdma_hw_get_qos - Get dma qos settings from device-tree. * @dma: Pointer to dma device. */ diff --git a/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.h b/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.h index b7ff3b53aeb0..a29f3323500d 100644 --- a/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.h +++ b/drivers/media/platform/msm/camera_v2/jpeg_dma/msm_jpeg_dma_hw.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -52,6 +52,8 @@ int msm_jpegdma_hw_get_clocks(struct msm_jpegdma_device *dma); int msm_jpegdma_hw_put_clocks(struct msm_jpegdma_device *dma); +int msm_jpegdma_hw_get_max_downscale(struct msm_jpegdma_device *dma); + int msm_jpegdma_hw_get_qos(struct msm_jpegdma_device *dma); void msm_jpegdma_hw_put_qos(struct msm_jpegdma_device *dma); diff --git a/include/uapi/media/msm_jpeg_dma.h b/include/uapi/media/msm_jpeg_dma.h index df3c7ee5b7cf..6b664566cb4c 100644 --- a/include/uapi/media/msm_jpeg_dma.h +++ b/include/uapi/media/msm_jpeg_dma.h @@ -17,6 +17,7 @@ /* msm jpeg dma control ID's */ #define V4L2_CID_JPEG_DMA_SPEED (V4L2_CID_PRIVATE_BASE) +#define V4L2_CID_JPEG_DMA_MAX_DOWN_SCALE (V4L2_CID_PRIVATE_BASE + 1) /* msm_jpeg_dma_buf */ struct msm_jpeg_dma_buff { |
