mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
gpu: ipu-v3: Add rotation mode conversion utilities
Add two functions: - ipu_degrees_to_rot_mode(): converts a degrees, hflip, and vflip setting to an IPU rotation mode. - ipu_rot_mode_to_degrees(): converts an IPU rotation mode with given hflip and vflip settings to degrees. Signed-off-by: Steve Longerbeam <steve_longerbeam@mentor.com> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
parent
ae0e9708b3
commit
f835f386a1
@ -114,6 +114,70 @@ enum ipu_color_space ipu_mbus_code_to_colorspace(u32 mbus_code)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ipu_mbus_code_to_colorspace);
|
||||
|
||||
int ipu_degrees_to_rot_mode(enum ipu_rotate_mode *mode, int degrees,
|
||||
bool hflip, bool vflip)
|
||||
{
|
||||
u32 r90, vf, hf;
|
||||
|
||||
switch (degrees) {
|
||||
case 0:
|
||||
vf = hf = r90 = 0;
|
||||
break;
|
||||
case 90:
|
||||
vf = hf = 0;
|
||||
r90 = 1;
|
||||
break;
|
||||
case 180:
|
||||
vf = hf = 1;
|
||||
r90 = 0;
|
||||
break;
|
||||
case 270:
|
||||
vf = hf = r90 = 1;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
hf ^= (u32)hflip;
|
||||
vf ^= (u32)vflip;
|
||||
|
||||
*mode = (enum ipu_rotate_mode)((r90 << 2) | (hf << 1) | vf);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ipu_degrees_to_rot_mode);
|
||||
|
||||
int ipu_rot_mode_to_degrees(int *degrees, enum ipu_rotate_mode mode,
|
||||
bool hflip, bool vflip)
|
||||
{
|
||||
u32 r90, vf, hf;
|
||||
|
||||
r90 = ((u32)mode >> 2) & 0x1;
|
||||
hf = ((u32)mode >> 1) & 0x1;
|
||||
vf = ((u32)mode >> 0) & 0x1;
|
||||
hf ^= (u32)hflip;
|
||||
vf ^= (u32)vflip;
|
||||
|
||||
switch ((enum ipu_rotate_mode)((r90 << 2) | (hf << 1) | vf)) {
|
||||
case IPU_ROTATE_NONE:
|
||||
*degrees = 0;
|
||||
break;
|
||||
case IPU_ROTATE_90_RIGHT:
|
||||
*degrees = 90;
|
||||
break;
|
||||
case IPU_ROTATE_180:
|
||||
*degrees = 180;
|
||||
break;
|
||||
case IPU_ROTATE_90_LEFT:
|
||||
*degrees = 270;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ipu_rot_mode_to_degrees);
|
||||
|
||||
struct ipuv3_channel *ipu_idmac_get(struct ipu_soc *ipu, unsigned num)
|
||||
{
|
||||
struct ipuv3_channel *channel;
|
||||
|
@ -301,6 +301,10 @@ int ipu_smfc_set_watermark(struct ipu_smfc *smfc, u32 set_level, u32 clr_level);
|
||||
enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc);
|
||||
enum ipu_color_space ipu_pixelformat_to_colorspace(u32 pixelformat);
|
||||
enum ipu_color_space ipu_mbus_code_to_colorspace(u32 mbus_code);
|
||||
int ipu_degrees_to_rot_mode(enum ipu_rotate_mode *mode, int degrees,
|
||||
bool hflip, bool vflip);
|
||||
int ipu_rot_mode_to_degrees(int *degrees, enum ipu_rotate_mode mode,
|
||||
bool hflip, bool vflip);
|
||||
|
||||
struct ipu_client_platformdata {
|
||||
int csi;
|
||||
|
Loading…
Reference in New Issue
Block a user