Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5cd0bca4 authored by Kamen Kirov's avatar Kamen Kirov
Browse files

camera_v2: Add IOCTL to set jpeg core clock rate



Adds a new IOCTL that provides ability to set the JPEG clock rate
dynamically.

Signed-off-by: default avatarKamen Kirov <kkirov@codeaurora.org>
Change-Id: I8a701c9f4ea047bc863b62559d6897575f15cc75
parent f0dd78ad
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,19 @@
#include "msm_jpeg_common.h"
#include "msm_jpeg_common.h"
#include "msm_jpeg_hw.h"
#include "msm_jpeg_hw.h"


int msm_jpeg_platform_set_clk_rate(struct msm_jpeg_device *pgmn_dev,
		long clk_rate)
{
	struct msm_cam_clk_info jpeg_core_clk_info[] = {
		{"core_clk", JPEG_CLK_RATE, 0}
	};

	jpeg_core_clk_info[0].clk_rate = clk_rate;

	return msm_cam_clk_enable(&pgmn_dev->pdev->dev, jpeg_core_clk_info,
			pgmn_dev->jpeg_clk, ARRAY_SIZE(jpeg_core_clk_info), 1);
}

void msm_jpeg_platform_p2v(struct msm_jpeg_device *pgmn_dev, struct file  *file,
void msm_jpeg_platform_p2v(struct msm_jpeg_device *pgmn_dev, struct file  *file,
	struct ion_handle **ionhandle, int domain_num)
	struct ion_handle **ionhandle, int domain_num)
{
{
+2 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,8 @@
#include "msm_jpeg_sync.h"
#include "msm_jpeg_sync.h"
#define JPEG_CLK_RATE 266670000
#define JPEG_CLK_RATE 266670000


int msm_jpeg_platform_set_clk_rate(struct msm_jpeg_device *pgmn_dev,
		long clk_rate);
void msm_jpeg_platform_p2v(struct msm_jpeg_device *pgmn_dev, struct file *file,
void msm_jpeg_platform_p2v(struct msm_jpeg_device *pgmn_dev, struct file *file,
	struct ion_handle **ionhandle, int domain_num);
	struct ion_handle **ionhandle, int domain_num);
uint32_t msm_jpeg_platform_v2p(struct msm_jpeg_device *pgmn_dev, int fd,
uint32_t msm_jpeg_platform_v2p(struct msm_jpeg_device *pgmn_dev, int fd,
+33 −0
Original line number Original line Diff line number Diff line
@@ -804,6 +804,36 @@ int msm_jpeg_ioctl_test_dump_region(struct msm_jpeg_device *pgmn_dev,
	return 0;
	return 0;
}
}


int msm_jpeg_ioctl_set_clk_rate(struct msm_jpeg_device *pgmn_dev,
	unsigned long arg)
{
	long clk_rate;
	int rc;

	if ((pgmn_dev->state != MSM_JPEG_INIT) &&
		(pgmn_dev->state != MSM_JPEG_RESET)) {
		JPEG_PR_ERR("%s:%d] failed\n", __func__, __LINE__);
		return -EFAULT;
	}
	if (get_user(clk_rate, (long __user *)arg)) {
		JPEG_PR_ERR("%s:%d] failed\n", __func__, __LINE__);
		return -EFAULT;
	}
	JPEG_DBG("%s:%d] Requested clk rate %ld\n", __func__, __LINE__,
		clk_rate);
	if (clk_rate < 0) {
		JPEG_PR_ERR("%s:%d] failed\n", __func__, __LINE__);
		return -EFAULT;
	}
	rc = msm_jpeg_platform_set_clk_rate(pgmn_dev, clk_rate);
	if (rc < 0) {
		JPEG_PR_ERR("%s: clk failed rc = %d\n", __func__, rc);
		return -EFAULT;
	}

	return 0;
}

long __msm_jpeg_ioctl(struct msm_jpeg_device *pgmn_dev,
long __msm_jpeg_ioctl(struct msm_jpeg_device *pgmn_dev,
	unsigned int cmd, unsigned long arg)
	unsigned int cmd, unsigned long arg)
{
{
@@ -873,6 +903,9 @@ long __msm_jpeg_ioctl(struct msm_jpeg_device *pgmn_dev,
		rc = msm_jpeg_ioctl_test_dump_region(pgmn_dev, arg);
		rc = msm_jpeg_ioctl_test_dump_region(pgmn_dev, arg);
		break;
		break;


	case MSM_JPEG_IOCTL_SET_CLK_RATE:
		rc = msm_jpeg_ioctl_set_clk_rate(pgmn_dev, arg);
		break;
	default:
	default:
		JPEG_PR_ERR(KERN_INFO "%s:%d] cmd = %d not supported\n",
		JPEG_PR_ERR(KERN_INFO "%s:%d] cmd = %d not supported\n",
			__func__, __LINE__, _IOC_NR(cmd));
			__func__, __LINE__, _IOC_NR(cmd));
+3 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,9 @@
#define MSM_JPEG_IOCTL_TEST_DUMP_REGION \
#define MSM_JPEG_IOCTL_TEST_DUMP_REGION \
	_IOW(MSM_JPEG_IOCTL_MAGIC, 15, unsigned long)
	_IOW(MSM_JPEG_IOCTL_MAGIC, 15, unsigned long)


#define MSM_JPEG_IOCTL_SET_CLK_RATE \
	_IOW(MSM_JPEG_IOCTL_MAGIC, 16, unsigned long)

#define MSM_JPEG_MODE_REALTIME_ENCODE 0
#define MSM_JPEG_MODE_REALTIME_ENCODE 0
#define MSM_JPEG_MODE_OFFLINE_ENCODE 1
#define MSM_JPEG_MODE_OFFLINE_ENCODE 1
#define MSM_JPEG_MODE_REALTIME_ROTATION 2
#define MSM_JPEG_MODE_REALTIME_ROTATION 2