blob: 29346bac02d2719d9415b7d41cd439cd83e5c229 [file] [log] [blame]
/*
* include/linux/amlogic/media/ppmgr/ppmgr.h
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef _PPMGR_MAIN_H
#define _PPMGR_MAIN_H
#include <linux/interrupt.h>
/*#include <mach/am_regs.h>*/
#include <linux/amlogic/media/canvas/canvas.h>
#include <linux/fb.h>
#include <linux/list.h>
#include <linux/uaccess.h>
#include <linux/sysfs.h>
#include <linux/spinlock.h>
#include <linux/kthread.h>
#define PPMGR_IOC_MAGIC 'P'
#define PPMGR_IOC_2OSD0 _IOW(PPMGR_IOC_MAGIC, 0x00, unsigned int)
#define PPMGR_IOC_ENABLE_PP _IOW(PPMGR_IOC_MAGIC, 0X01, unsigned int)
#define PPMGR_IOC_CONFIG_FRAME _IOW(PPMGR_IOC_MAGIC, 0X02, unsigned int)
#define PPMGR_IOC_GET_ANGLE _IOR(PPMGR_IOC_MAGIC, 0X03, unsigned int)
#define PPMGR_IOC_SET_ANGLE _IOW(PPMGR_IOC_MAGIC, 0X04, unsigned int)
#ifdef CONFIG_AMLOGIC_POST_PROCESS_MANAGER_3D_PROCESS
#define PPMGR_IOC_VIEW_MODE _IOW(PPMGR_IOC_MAGIC, 0X05, unsigned int)
#define PPMGR_IOC_HOR_VER_DOUBLE _IOW(PPMGR_IOC_MAGIC, 0X06, unsigned int)
#define PPMGR_IOC_SWITCHMODE _IOW(PPMGR_IOC_MAGIC, 0X07, unsigned int)
#define PPMGR_IOC_3D_DIRECTION _IOW(PPMGR_IOC_MAGIC, 0X08, unsigned int)
#define PPMGR_IOC_3D_SCALE_DOWN _IOW(PPMGR_IOC_MAGIC, 0X09, unsigned int)
#endif
struct frame_info_t {
int width;
int height;
int bpp;
int angle;
int format;
};
#ifdef CONFIG_AMLOGIC_POST_PROCESS_MANAGER_3D_PROCESS
/*mode: bit0-7, process type: disable, 3d, 2d->3d, 3d->2d*/
#define PPMGR_3D_PROCESS_MODE_MASK 0xff
#define PPMGR_3D_PROCESS_MODE_SHIFT 0
#define PPMGR_3D_PROCESS_MODE_DISABLE 0
#define PPMGR_3D_PROCESS_MODE_3D_ENABLE 1
#define PPMGR_3D_PROCESS_MODE_3D_TO_2D 2
#define PPMGR_3D_PROCESS_MODE_2D_TO_3D 3
/*mode: bit 8-9, detect src format: 0-auto check, 1- lr format, 2-tb format*/
#define PPMGR_3D_PROCESS_SRC_FOMRAT_MASK 0x00000300
#define PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT 8
#define PPMGR_3D_PROCESS_SRC_FOMRAT_AUTO 0
#define PPMGR_3D_PROCESS_SRC_FOMRAT_LR 1
#define PPMGR_3D_PROCESS_SRC_FOMRAT_TB 2
/*mode: bit 10, L-R/T-B switch flag: 0-no switch, 1-switch*/
#define PPMGR_3D_PROCESS_SWITCH_FLAG 0x00000400
/*mode: bit 11, 3D->2D, use L/T frame : 0-L/T, 1-R/B*/
#define PPMGR_3D_PROCESS_3D_TO_2D_SRC_FRAME 0x00000800
/* mode: bit 12-13, horizontal/vertical double mode,
* for full/half format 3d src: 0-none, 1-hor double, 2-ver double
*/
#define PPMGR_3D_PROCESS_DOUBLE_TYPE 0x00003000
#define PPMGR_3D_PROCESS_DOUBLE_TYPE_SHIFT 12
#define PPMGR_3D_PROCESS_DOUBLE_TYPE_NONE 0
#define PPMGR_3D_PROCESS_DOUBLE_TYPE_HOR 1
#define PPMGR_3D_PROCESS_DOUBLE_TYPE_VER 2
/*mode: bit 14-15 2d to 3d control*/
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_MASK 0x0000c000
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_SHIFT 14
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_NONE 0
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_LEFT_MOVE 1
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_RIGHT_MOVE 2
/*mode: bit 16-19, 2D->3D function: 0-normal, 1- field depth*/
#define PPMGR_3D_PROCESS_2D_TO_3D_MASK 0x000f0000
#define PPMGR_3D_PROCESS_2D_TO_3D_SHIFT 16
#define PPMGR_3D_PROCESS_2D_TO_3D_NORMAL 0
#define PPMGR_3D_PROCESS_2D_TO_3D_FIELD_DEPTH 1
/*mode: bit 20-27 2d to 3d control value*/
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_VALUE_MASK 0x0ff00000
#define PPMGR_3D_PROCESS_2D_TO_3D_CONTROL_VALUE_SHIFT 20
/*mode: bit 28-29 3d rotate direction control*/
/*#define PPMGR_3D_PROCESS_3D_ROTATE_DIRECTION_MASK 0x30000000*/
/*#define PPMGR_3D_PROCESS_3D_ROTATE_DIRECTION_VALUE_SHIFT 28*/
/*mode bit:30-31 not used*/
/*0x00000000*/
#define EXTERNAL_MODE_3D_DISABLE PPMGR_3D_PROCESS_MODE_DISABLE
#define EXTERNAL_MODE_3D_AUTO (PPMGR_3D_PROCESS_MODE_3D_ENABLE| \
(PPMGR_3D_PROCESS_SRC_FOMRAT_AUTO<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT))
#define EXTERNAL_MODE_3D_AUTO_SWITCH (PPMGR_3D_PROCESS_MODE_3D_ENABLE | \
(PPMGR_3D_PROCESS_SRC_FOMRAT_AUTO<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT)|\
PPMGR_3D_PROCESS_SWITCH_FLAG)
#define EXTERNAL_MODE_3D_LR (PPMGR_3D_PROCESS_MODE_3D_ENABLE | \
(PPMGR_3D_PROCESS_SRC_FOMRAT_LR<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT))
#define EXTERNAL_MODE_3D_LR_SWITCH (PPMGR_3D_PROCESS_MODE_3D_ENABLE | \
(PPMGR_3D_PROCESS_SRC_FOMRAT_LR<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT)| \
PPMGR_3D_PROCESS_SWITCH_FLAG)
#define EXTERNAL_MODE_3D_TB (PPMGR_3D_PROCESS_MODE_3D_ENABLE | \
(PPMGR_3D_PROCESS_SRC_FOMRAT_TB<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT))
#define EXTERNAL_MODE_3D_TB_SWITCH (PPMGR_3D_PROCESS_MODE_3D_ENABLE | \
(PPMGR_3D_PROCESS_SRC_FOMRAT_TB<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT) | \
PPMGR_3D_PROCESS_SWITCH_FLAG)
#define EXTERNAL_MODE_3D_TO_2D_AUTO_1 (PPMGR_3D_PROCESS_MODE_3D_TO_2D | \
(PPMGR_3D_PROCESS_SRC_FOMRAT_AUTO<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT))
#define EXTERNAL_MODE_3D_TO_2D_AUTO_2 (PPMGR_3D_PROCESS_MODE_3D_TO_2D| \
(PPMGR_3D_PROCESS_SRC_FOMRAT_AUTO<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT)| \
PPMGR_3D_PROCESS_3D_TO_2D_SRC_FRAME)
#define EXTERNAL_MODE_3D_TO_2D_L (PPMGR_3D_PROCESS_MODE_3D_TO_2D| \
(PPMGR_3D_PROCESS_SRC_FOMRAT_LR<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT))
#define EXTERNAL_MODE_3D_TO_2D_R (PPMGR_3D_PROCESS_MODE_3D_TO_2D| \
(PPMGR_3D_PROCESS_SRC_FOMRAT_LR<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT)| \
PPMGR_3D_PROCESS_3D_TO_2D_SRC_FRAME)
#define EXTERNAL_MODE_3D_TO_2D_T (PPMGR_3D_PROCESS_MODE_3D_TO_2D| \
(PPMGR_3D_PROCESS_SRC_FOMRAT_TB<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT))
#define EXTERNAL_MODE_3D_TO_2D_B (PPMGR_3D_PROCESS_MODE_3D_TO_2D| \
(PPMGR_3D_PROCESS_SRC_FOMRAT_TB<<PPMGR_3D_PROCESS_SRC_FORMAT_SHIFT)| \
PPMGR_3D_PROCESS_3D_TO_2D_SRC_FRAME)
#define EXTERNAL_MODE_2D_TO_3D (PPMGR_3D_PROCESS_MODE_2D_TO_3D| \
(PPMGR_3D_PROCESS_2D_TO_3D_NORMAL<<PPMGR_3D_PROCESS_2D_TO_3D_SHIFT))
#define EXTERNAL_MODE_FIELD_DEPTH (PPMGR_3D_PROCESS_MODE_2D_TO_3D| \
(PPMGR_3D_PROCESS_2D_TO_3D_FIELD_DEPTH \
<<PPMGR_3D_PROCESS_2D_TO_3D_SHIFT))
#define TYPE_NONE 0
#define TYPE_2D_TO_3D 1
#define TYPE_3D_LR 2
#define TYPE_3D_TB 3
#define TYPE_3D_TO_2D_LR 4
#define TYPE_3D_TO_2D_TB 5
enum view_mode_t {
VIEWMODE_NORMAL = 0,
VIEWMODE_FULL,
VIEWMODE_4_3,
VIEWMODE_16_9,
VIEWMODE_1_1,
VIEWMODE_MAX
};
#endif
/*TV 3D mode*/
#define PPMGR_MODE_3D_ENABLE 0x00000001
#define PPMGR_MODE_AUTO 0x00000002
#define PPMGR_MODE_2D_TO_3D 0x00000004
#define PPMGR_MODE_LR 0x00000008
#define PPMGR_MODE_BT 0x00000010
#define PPMGR_MODE_LR_SWITCH 0x00000020
#define PPMGR_MODE_FIELD_DEPTH 0x00000040
#define PPMGR_MODE_3D_TO_2D_L 0x00000080
#define PPMGR_MODE_3D_TO_2D_R 0x00000100
#define LR_FORMAT_INDICATOR 0x00000200
#define BT_FORMAT_INDICATOR 0x00000400
#define TYPE_NONE 0
#define TYPE_2D_TO_3D 1
#define TYPE_LR 2
#define TYPE_BT 3
#define TYPE_LR_SWITCH 4
#define TYPE_FILED_DEPTH 5
#define TYPE_3D_TO_2D_L 6
#define TYPE_3D_TO_2D_R 7
enum platform_type_t {
PLATFORM_MID = 0, PLATFORM_MBX, PLATFORM_TV, PLATFORM_MID_VERTICAL
};
/*#endif*/
#endif