18611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#ifndef __MSM_ROTATOR_H__
28611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define __MSM_ROTATOR_H__
38611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
48611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#include <linux/types.h>
58611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#include <linux/msm_mdp.h>
68611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
78611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define MSM_ROTATOR_IOCTL_MAGIC 'R'
88611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
98611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define MSM_ROTATOR_IOCTL_START   \
108611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu		_IOWR(MSM_ROTATOR_IOCTL_MAGIC, 1, struct msm_rotator_img_info)
118611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define MSM_ROTATOR_IOCTL_ROTATE   \
128611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu		_IOW(MSM_ROTATOR_IOCTL_MAGIC, 2, struct msm_rotator_data_info)
138611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define MSM_ROTATOR_IOCTL_FINISH   \
148611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu		_IOW(MSM_ROTATOR_IOCTL_MAGIC, 3, int)
1576de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed#define MSM_ROTATOR_IOCTL_BUFFER_SYNC   \
1676de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed		_IOW(MSM_ROTATOR_IOCTL_MAGIC, 4, struct msm_rotator_buf_sync)
178611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
188611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#define ROTATOR_VERSION_01	0xA5B4C301
198611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
208611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsuenum rotator_clk_type {
218611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	ROTATOR_CORE_CLK,
228611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	ROTATOR_PCLK,
238611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	ROTATOR_IMEM_CLK
248611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
258611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
2676de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmedstruct msm_rotator_buf_sync {
2776de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed	uint32_t session_id;
2876de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed	uint32_t flags;
2976de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed	int acq_fen_fd;
3076de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed	int rel_fen_fd;
3176de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed};
3276de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed
338611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct msm_rotator_img_info {
348611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int session_id;
358611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msmfb_img  src;
368611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msmfb_img  dst;
378611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct mdp_rect src_rect;
388611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int    dst_x;
398611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int    dst_y;
408611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned char   rotations;
418611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	int enable;
428611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int	downscale_ratio;
438611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int secure;
448611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
458611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
468611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct msm_rotator_data_info {
478611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	int session_id;
488611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msmfb_data src;
498611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msmfb_data dst;
508611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int version_key;
518611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msmfb_data src_chroma;
528611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msmfb_data dst_chroma;
5376de202d7eae6422d5bcba124734a96b8b6b1b01Naseer Ahmed	uint32_t wait_for_finish;
548611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
558611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
568611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct msm_rot_clocks {
578611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	const char *clk_name;
588611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	enum rotator_clk_type clk_type;
598611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int clk_rate;
608611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
618611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
628611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsustruct msm_rotator_platform_data {
638611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int number_of_clocks;
648611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	unsigned int hardware_version_number;
658611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msm_rot_clocks *rotator_clks;
668611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#ifdef CONFIG_MSM_BUS_SCALING
678611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	struct msm_bus_scale_pdata *bus_scale_table;
688611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#endif
698611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu	char rot_iommu_split_domain;
708611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu};
718611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu#endif
728611d5578ff014a1415b26e75e63aecbc4ad266cBrian Muramatsu
73