15bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#ifndef __MSM_ROTATOR_H__
25bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define __MSM_ROTATOR_H__
35bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
45bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#include <linux/types.h>
55bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#include <linux/msm_mdp.h>
65bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
75bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define MSM_ROTATOR_IOCTL_MAGIC 'R'
85bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
95bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define MSM_ROTATOR_IOCTL_START   \
105bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson		_IOWR(MSM_ROTATOR_IOCTL_MAGIC, 1, struct msm_rotator_img_info)
115bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define MSM_ROTATOR_IOCTL_ROTATE   \
125bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson		_IOW(MSM_ROTATOR_IOCTL_MAGIC, 2, struct msm_rotator_data_info)
135bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define MSM_ROTATOR_IOCTL_FINISH   \
145bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson		_IOW(MSM_ROTATOR_IOCTL_MAGIC, 3, int)
155bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
165bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#define ROTATOR_VERSION_01	0xA5B4C301
175bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
185bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonenum rotator_clk_type {
195bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	ROTATOR_CORE_CLK,
205bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	ROTATOR_PCLK,
215bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	ROTATOR_IMEM_CLK
225bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
235bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
245bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct msm_rotator_img_info {
255bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int session_id;
265bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msmfb_img  src;
275bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msmfb_img  dst;
285bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct mdp_rect src_rect;
295bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int    dst_x;
305bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int    dst_y;
315bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned char   rotations;
325bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int enable;
335bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int	downscale_ratio;
345bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int secure;
355bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
365bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
375bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct msm_rotator_data_info {
385bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	int session_id;
395bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msmfb_data src;
405bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msmfb_data dst;
415bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int version_key;
425bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msmfb_data src_chroma;
435bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msmfb_data dst_chroma;
445bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
455bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
465bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct msm_rot_clocks {
475bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	const char *clk_name;
485bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	enum rotator_clk_type clk_type;
495bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int clk_rate;
505bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
515bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
525bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilsonstruct msm_rotator_platform_data {
535bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int number_of_clocks;
545bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	unsigned int hardware_version_number;
555bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msm_rot_clocks *rotator_clks;
565bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#ifdef CONFIG_MSM_BUS_SCALING
575bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	struct msm_bus_scale_pdata *bus_scale_table;
585bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#endif
595bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson	char rot_iommu_split_domain;
605bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson};
615bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson#endif
625bccd2d0d6de8ffd0c244c1b66ef5a9ac9409404Simon Wilson
63