android_kernel_xiaomi_sm8350/rotator/sde_rotator_inline.h
Narendra Muppalla 3709853456 Display drivers kernel project initial snapshot
This change brings msm display driver including sde,
dp, dsi, rotator, dsi pll and dp pll from base 4.19 kernel
project. It is first source code snapshot from base kernel project.

Change-Id: Iec864c064ce5ea04e170f24414c728684002f284
Signed-off-by: Narendra Muppalla <NarendraM@codeaurora.org>
2019-04-14 22:20:59 -07:00

162 lines
4.5 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
*/
#ifndef __SDE_ROTATOR_INLINE_H__
#define __SDE_ROTATOR_INLINE_H__
#include <linux/types.h>
#include <linux/dma-buf.h>
#include <linux/platform_device.h>
#include "sde_rotator_formats.h"
#define SDE_ROTATOR_INLINE_PLANE_MAX 4
/*
* enum sde_rotator_inline_cmd_type - inline rotator command stages
* @SDE_ROTATOR_INLINE_CMD_VALIDATE: validate command only
* @SDE_ROTATOR_INLINE_CMD_COMMIT: commit command to hardware
* @SDE_ROTATOR_INLINE_CMD_START: ready to start inline rotation
* @SDE_ROTATOR_INLINE_CMD_CLEANUP: cleanup after commit is done
* @SDE_ROTATOR_INLINE_CMD_ABORT: abort current commit and reset
*/
enum sde_rotator_inline_cmd_type {
SDE_ROTATOR_INLINE_CMD_VALIDATE,
SDE_ROTATOR_INLINE_CMD_COMMIT,
SDE_ROTATOR_INLINE_CMD_START,
SDE_ROTATOR_INLINE_CMD_CLEANUP,
SDE_ROTATOR_INLINE_CMD_ABORT,
};
/**
* sde_rotator_inline_cmd - inline rotation command
* @sequence_id: unique command sequence identifier
* @video_mode: true if video interface is connected
* @fps: frame rate in frame-per-second
* @rot90: rotate 90 counterclockwise
* @hflip: horizontal flip prior to rotation
* @vflip: vertical flip prior to rotation
* @secure: true if buffer is in secure domain
* @prefill_bw: prefill bandwidth in Bps
* @clkrate: clock rate in Hz
* @data_bw: data bus bandwidth in Bps
* @src_addr: source i/o buffer virtual address
* @src_len: source i/o buffer length
* @src_planes: source plane number
* @src_pixfmt: v4l2 fourcc pixel format of source buffer
* @src_width: width of source buffer
* @src_height: height of source buffer
* @src_rect_x: roi x coordinate of source buffer
* @src_rect_y: roi y coordinate of source buffer
* @src_rect_w: roi width of source buffer
* @src_rect_h: roi height of source buffer
* @dst_addr: destination i/o virtual buffer address
* @dst_len: destination i/o buffer length
* @dst_planes: destination plane number
* @dst_pixfmt: v4l2 fourcc pixel format of destination buffer
* @dst_rect_x: roi x coordinate of destination buffer
* @dst_rect_y: roi y coordinate of destination buffer
* @dst_rect_w: roi width of destination buffer
* @dst_rect_h: roi height of destination buffer
* @dst_writeback: true if cache writeback is required
* @priv_handle: private handle of rotator session
*/
struct sde_rotator_inline_cmd {
u32 sequence_id;
bool video_mode;
u32 fps;
bool rot90;
bool hflip;
bool vflip;
bool secure;
u64 prefill_bw;
u64 clkrate;
u64 data_bw;
dma_addr_t src_addr[SDE_ROTATOR_INLINE_PLANE_MAX];
u32 src_len[SDE_ROTATOR_INLINE_PLANE_MAX];
u32 src_planes;
u32 src_pixfmt;
u32 src_width;
u32 src_height;
u32 src_rect_x;
u32 src_rect_y;
u32 src_rect_w;
u32 src_rect_h;
dma_addr_t dst_addr[SDE_ROTATOR_INLINE_PLANE_MAX];
u32 dst_len[SDE_ROTATOR_INLINE_PLANE_MAX];
u32 dst_planes;
u32 dst_pixfmt;
u32 dst_rect_x;
u32 dst_rect_y;
u32 dst_rect_w;
u32 dst_rect_h;
bool dst_writeback;
void *priv_handle;
};
#if defined(CONFIG_MSM_SDE_ROTATOR)
void *sde_rotator_inline_open(struct platform_device *pdev);
int sde_rotator_inline_get_dst_pixfmt(struct platform_device *pdev,
u32 src_pixfmt, u32 *dst_pixfmt);
int sde_rotator_inline_get_downscale_caps(struct platform_device *pdev,
char *downscale_caps, int len);
int sde_rotator_inline_get_maxlinewidth(struct platform_device *pdev);
int sde_rotator_inline_get_pixfmt_caps(struct platform_device *pdev,
bool input, u32 *pixfmt, int len);
int sde_rotator_inline_commit(void *handle, struct sde_rotator_inline_cmd *cmd,
enum sde_rotator_inline_cmd_type cmd_type);
int sde_rotator_inline_release(void *handle);
void sde_rotator_inline_reg_dump(struct platform_device *pdev);
#else
void *sde_rotator_inline_open(struct platform_device *pdev)
{
return NULL;
}
int sde_rotator_inline_get_dst_pixfmt(struct platform_device *pdev,
u32 src_pixfmt, u32 *dst_pixfmt)
{
return 0;
}
int sde_rotator_inline_get_downscale_caps(struct platform_device *pdev,
char *downscale_caps, int len)
{
return 0;
}
int sde_rotator_inline_get_maxlinewidth(struct platform_device *pdev)
{
return 0;
}
int sde_rotator_inline_get_pixfmt_caps(struct platform_device *pdev,
bool input, u32 *pixfmt, int len)
{
return 0;
}
int sde_rotator_inline_commit(void *handle, struct sde_rotator_inline_cmd *cmd,
enum sde_rotator_inline_cmd_type cmd_type)
{
return 0;
}
int sde_rotator_inline_release(void *handle)
{
return 0;
}
void sde_rotator_inline_reg_dump(struct platform_device *pdev)
{
}
#endif
#endif /* __SDE_ROTATOR_INLINE_H__ */