mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
rk3168_86v: Basic functions is ok
This commit is contained in:
parent
60c5bd89d7
commit
aa932b7653
4
Makefile
4
Makefile
|
|
@ -194,8 +194,8 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
|||
export KBUILD_BUILDHOST := $(SUBARCH)
|
||||
#ARCH ?= $(SUBARCH)
|
||||
ARCH ?= arm
|
||||
ifneq ($(wildcard ../toolchain/arm-eabi-4.4.3),)
|
||||
CROSS_COMPILE ?= ../toolchain/arm-eabi-4.4.3/bin/arm-eabi-
|
||||
ifneq ($(wildcard ../../../toolchain/arm-eabi-4.4.3),)
|
||||
CROSS_COMPILE ?= ../../../toolchain/arm-eabi-4.4.3/bin/arm-eabi-
|
||||
endif
|
||||
ifneq ($(wildcard ../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3),)
|
||||
CROSS_COMPILE ?= ../prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
|
||||
|
|
|
|||
3087
arch/arm/configs/rk3168_86v_defconfig
Normal file
3087
arch/arm/configs/rk3168_86v_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -124,6 +124,10 @@ config MACH_RK3168_LR097
|
|||
config MACH_RK3168_DS1006H
|
||||
bool "RK3168 DS1006h Board"
|
||||
|
||||
config MACH_RK3168_86V
|
||||
bool "RK3168 86V Board"
|
||||
|
||||
|
||||
endchoice
|
||||
endif
|
||||
|
||||
|
|
|
|||
|
|
@ -42,3 +42,5 @@ obj-$(CONFIG_MACH_RK3108_TB) += board-rk3108-tb.o
|
|||
obj-$(CONFIG_MACH_RK3168_TB) += board-rk3168-tb.o
|
||||
obj-$(CONFIG_MACH_RK3168_LR097) += board-rk3168-LR097.o
|
||||
obj-$(CONFIG_MACH_RK3168_DS1006H) += board-rk3168-ds1006h.o
|
||||
obj-$(CONFIG_MACH_RK3168_86V) += board-rk3168-86v.o
|
||||
|
||||
|
|
|
|||
486
arch/arm/mach-rk30/board-rk3168-86v-camera.c
Normal file
486
arch/arm/mach-rk30/board-rk3168-86v-camera.c
Normal file
|
|
@ -0,0 +1,486 @@
|
|||
#ifdef CONFIG_VIDEO_RK29
|
||||
/*---------------- Camera Sensor Macro Define Begin ------------------------*/
|
||||
/*---------------- Camera Sensor Configuration Macro Begin ------------------------*/
|
||||
#define CONFIG_SENSOR_0 RK29_CAM_SENSOR_OV5640 /* back camera sensor */
|
||||
#define CONFIG_SENSOR_IIC_ADDR_0 0x00
|
||||
#define CONFIG_SENSOR_IIC_ADAPTER_ID_0 3
|
||||
#define CONFIG_SENSOR_ORIENTATION_0 90
|
||||
#define CONFIG_SENSOR_POWER_PIN_0 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_RESET_PIN_0 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERDN_PIN_0 RK30_PIN3_PB5
|
||||
#define CONFIG_SENSOR_FALSH_PIN_0 RK30_PIN0_PD5 //INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_L
|
||||
#define CONFIG_SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_H
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_240X160_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_480P_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_0 15000
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_0 30000
|
||||
|
||||
#define CONFIG_SENSOR_01 RK29_CAM_SENSOR_OV5642 /* back camera sensor 1 */
|
||||
#define CONFIG_SENSOR_IIC_ADDR_01 0x00
|
||||
#define CONFIG_SENSOR_IIC_ADAPTER_ID_01 4
|
||||
#define CONFIG_SENSOR_ORIENTATION_01 90
|
||||
#define CONFIG_SENSOR_POWER_PIN_01 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_RESET_PIN_01 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERDN_PIN_01 RK30_PIN1_PD6
|
||||
#define CONFIG_SENSOR_FALSH_PIN_01 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERACTIVE_LEVEL_01 RK29_CAM_POWERACTIVE_L
|
||||
#define CONFIG_SENSOR_RESETACTIVE_LEVEL_01 RK29_CAM_RESETACTIVE_L
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_01 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_01 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_240X160_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_480P_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_01 15000
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_01 30000
|
||||
|
||||
#define CONFIG_SENSOR_02 RK29_CAM_SENSOR_OV5640 /* back camera sensor 2 */
|
||||
#define CONFIG_SENSOR_IIC_ADDR_02 0x00
|
||||
#define CONFIG_SENSOR_CIF_INDEX_02 0
|
||||
#define CONFIG_SENSOR_IIC_ADAPTER_ID_02 4
|
||||
#define CONFIG_SENSOR_ORIENTATION_02 90
|
||||
#define CONFIG_SENSOR_POWER_PIN_02 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_RESET_PIN_02 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERDN_PIN_02 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_FALSH_PIN_02 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERACTIVE_LEVEL_02 RK29_CAM_POWERACTIVE_L
|
||||
#define CONFIG_SENSOR_RESETACTIVE_LEVEL_02 RK29_CAM_RESETACTIVE_L
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_02 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_02 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_240X160_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_480P_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_02 15000
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_02 30000
|
||||
|
||||
#define CONFIG_SENSOR_1 RK29_CAM_SENSOR_GC0308 /* front camera sensor 0 */
|
||||
#define CONFIG_SENSOR_IIC_ADDR_1 0x42
|
||||
#define CONFIG_SENSOR_IIC_ADAPTER_ID_1 3
|
||||
#define CONFIG_SENSOR_ORIENTATION_1 270
|
||||
#define CONFIG_SENSOR_POWER_PIN_1 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_RESET_PIN_1 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERDN_PIN_1 RK30_PIN3_PB4
|
||||
#define CONFIG_SENSOR_FALSH_PIN_1 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_L
|
||||
#define CONFIG_SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_240X160_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_480P_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_1 15000
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_1 30000
|
||||
|
||||
#define CONFIG_SENSOR_11 RK29_CAM_SENSOR_OV2659 /* front camera sensor 1 */
|
||||
#define CONFIG_SENSOR_IIC_ADDR_11 0x00
|
||||
#define CONFIG_SENSOR_IIC_ADAPTER_ID_11 3
|
||||
#define CONFIG_SENSOR_ORIENTATION_11 270
|
||||
#define CONFIG_SENSOR_POWER_PIN_11 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_RESET_PIN_11 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERDN_PIN_11 INVALID_GPIO//RK30_PIN1_PB7
|
||||
#define CONFIG_SENSOR_FALSH_PIN_11 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERACTIVE_LEVEL_11 RK29_CAM_POWERACTIVE_L
|
||||
#define CONFIG_SENSOR_RESETACTIVE_LEVEL_11 RK29_CAM_RESETACTIVE_L
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_11 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_11 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_240X160_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_480P_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_11 15000
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_11 30000
|
||||
|
||||
#define CONFIG_SENSOR_12 RK29_CAM_SENSOR_OV2659//RK29_CAM_SENSOR_OV2655 /* front camera sensor 2 */
|
||||
#define CONFIG_SENSOR_IIC_ADDR_12 0x00
|
||||
#define CONFIG_SENSOR_IIC_ADAPTER_ID_12 3
|
||||
#define CONFIG_SENSOR_ORIENTATION_12 270
|
||||
#define CONFIG_SENSOR_POWER_PIN_12 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_RESET_PIN_12 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERDN_PIN_12 INVALID_GPIO//RK30_PIN1_PB7
|
||||
#define CONFIG_SENSOR_FALSH_PIN_12 INVALID_GPIO
|
||||
#define CONFIG_SENSOR_POWERACTIVE_LEVEL_12 RK29_CAM_POWERACTIVE_L
|
||||
#define CONFIG_SENSOR_RESETACTIVE_LEVEL_12 RK29_CAM_RESETACTIVE_L
|
||||
#define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_12 RK29_CAM_POWERDNACTIVE_H
|
||||
#define CONFIG_SENSOR_FLASHACTIVE_LEVEL_12 RK29_CAM_FLASHACTIVE_L
|
||||
|
||||
#define CONFIG_SENSOR_QCIF_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_240X160_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_QVGA_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_CIF_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_VGA_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_480P_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_SVGA_FPS_FIXED_12 15000
|
||||
#define CONFIG_SENSOR_720P_FPS_FIXED_12 30000
|
||||
|
||||
|
||||
#endif //#ifdef CONFIG_VIDEO_RK29
|
||||
/*---------------- Camera Sensor Configuration Macro End------------------------*/
|
||||
#include "../../../drivers/media/video/rk30_camera.c"
|
||||
/*---------------- Camera Sensor Macro Define End ---------*/
|
||||
|
||||
#define PMEM_CAM_SIZE PMEM_CAM_NECESSARY
|
||||
/*****************************************************************************************
|
||||
* camera devices
|
||||
* author: ddl@rock-chips.com
|
||||
*****************************************************************************************/
|
||||
#ifdef CONFIG_VIDEO_RK29
|
||||
#define CONFIG_SENSOR_POWER_IOCTL_USR 0 //define this refer to your board layout
|
||||
#define CONFIG_SENSOR_RESET_IOCTL_USR 0
|
||||
#define CONFIG_SENSOR_POWERDOWN_IOCTL_USR 0
|
||||
#define CONFIG_SENSOR_FLASH_IOCTL_USR 1
|
||||
|
||||
static void rk_cif_power(int on)
|
||||
{
|
||||
struct regulator *ldo_18,*ldo_28;
|
||||
ldo_28 = regulator_get(NULL, "ldo7"); // vcc28_cif
|
||||
ldo_18 = regulator_get(NULL, "ldo1"); // vcc18_cif
|
||||
if (ldo_28 == NULL || IS_ERR(ldo_28) || ldo_18 == NULL || IS_ERR(ldo_18)){
|
||||
printk("get cif ldo failed!\n");
|
||||
return;
|
||||
}
|
||||
if(on == 0){
|
||||
regulator_disable(ldo_28);
|
||||
regulator_put(ldo_28);
|
||||
regulator_disable(ldo_18);
|
||||
regulator_put(ldo_18);
|
||||
mdelay(500);
|
||||
}
|
||||
else{
|
||||
regulator_set_voltage(ldo_28, 2800000, 2800000);
|
||||
regulator_enable(ldo_28);
|
||||
// printk("%s set ldo7 vcc28_cif=%dmV end\n", __func__, regulator_get_voltage(ldo_28));
|
||||
regulator_put(ldo_28);
|
||||
|
||||
regulator_set_voltage(ldo_18, 1800000, 1800000);
|
||||
// regulator_set_suspend_voltage(ldo, 1800000);
|
||||
regulator_enable(ldo_18);
|
||||
// printk("%s set ldo1 vcc18_cif=%dmV end\n", __func__, regulator_get_voltage(ldo_18));
|
||||
regulator_put(ldo_18);
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG_SENSOR_POWER_IOCTL_USR
|
||||
static int sensor_power_usr_cb (struct rk29camera_gpio_res *res,int on)
|
||||
{
|
||||
//#error "CONFIG_SENSOR_POWER_IOCTL_USR is 1, sensor_power_usr_cb function must be writed!!";
|
||||
rk_cif_power(on);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_RESET_IOCTL_USR
|
||||
static int sensor_reset_usr_cb (struct rk29camera_gpio_res *res,int on)
|
||||
{
|
||||
#error "CONFIG_SENSOR_RESET_IOCTL_USR is 1, sensor_reset_usr_cb function must be writed!!";
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
|
||||
static int sensor_powerdown_usr_cb (struct rk29camera_gpio_res *res,int on)
|
||||
{
|
||||
#error "CONFIG_SENSOR_POWERDOWN_IOCTL_USR is 1, sensor_powerdown_usr_cb function must be writed!!";
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_FLASH_IOCTL_USR
|
||||
|
||||
#define CONFIG_SENSOR_FALSH_EN_PIN_0 RK30_PIN0_PD5 //high:enable
|
||||
#define CONFIG_SENSOR_FALSH_EN_MUX_0 GPIO0D5_SPI1TXD_NAME
|
||||
#define CONFIG_SENSOR_FALSH_MODE_PIN_0 RK30_PIN0_PD4 //high:FLASH, low:torch
|
||||
#define CONFIG_SENSOR_FALSH_MODE_MUX_0 GPIO0D4_SPI1RXD_NAME
|
||||
|
||||
static int sensor_init_flags = 0;
|
||||
static int sensor_flash_usr_cb (struct rk29camera_gpio_res *res,int on)
|
||||
{
|
||||
if(sensor_init_flags == 0){
|
||||
rk30_mux_api_set(CONFIG_SENSOR_FALSH_MODE_MUX_0, 0);
|
||||
int ret = gpio_request(CONFIG_SENSOR_FALSH_MODE_PIN_0, "camera_flash_mode");
|
||||
if (ret != 0) {
|
||||
printk(">>>>gpio request camera_flash_mode faile !!\n");
|
||||
}
|
||||
|
||||
gpio_direction_output(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
|
||||
sensor_init_flags = 1 ;
|
||||
}
|
||||
switch (on) {
|
||||
case Flash_Off: {
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 0);
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case Flash_On: {
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 1);
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_MODE_PIN_0, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case Flash_Torch: {
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 1);
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_MODE_PIN_0, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
printk("%s..Flash command(%d) is invalidate \n",__FUNCTION__, on);
|
||||
gpio_set_value(CONFIG_SENSOR_FALSH_EN_PIN_0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct rk29camera_platform_ioctl_cb sensor_ioctl_cb = {
|
||||
#if CONFIG_SENSOR_POWER_IOCTL_USR
|
||||
.sensor_power_cb = sensor_power_usr_cb,
|
||||
#else
|
||||
.sensor_power_cb = NULL,
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_RESET_IOCTL_USR
|
||||
.sensor_reset_cb = sensor_reset_usr_cb,
|
||||
#else
|
||||
.sensor_reset_cb = NULL,
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
|
||||
.sensor_powerdown_cb = sensor_powerdown_usr_cb,
|
||||
#else
|
||||
.sensor_powerdown_cb = NULL,
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_FLASH_IOCTL_USR
|
||||
.sensor_flash_cb = sensor_flash_usr_cb,
|
||||
#else
|
||||
.sensor_flash_cb = NULL,
|
||||
#endif
|
||||
};
|
||||
|
||||
#if CONFIG_SENSOR_IIC_ADDR_0
|
||||
static struct reginfo_t rk_init_data_sensor_reg_0[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
static struct reginfo_t rk_init_data_sensor_winseqreg_0[] ={
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
#endif
|
||||
|
||||
#if CONFIG_SENSOR_IIC_ADDR_1
|
||||
static struct reginfo_t rk_init_data_sensor_reg_1[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
static struct reginfo_t rk_init_data_sensor_winseqreg_1[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_01
|
||||
static struct reginfo_t rk_init_data_sensor_reg_01[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
static struct reginfo_t rk_init_data_sensor_winseqreg_01[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_02
|
||||
static struct reginfo_t rk_init_data_sensor_reg_02[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
static struct reginfo_t rk_init_data_sensor_winseqreg_02[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_11
|
||||
static struct reginfo_t rk_init_data_sensor_reg_11[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
static struct reginfo_t rk_init_data_sensor_winseqreg_11[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_12
|
||||
static struct reginfo_t rk_init_data_sensor_reg_12[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
static struct reginfo_t rk_init_data_sensor_winseqreg_12[] =
|
||||
{
|
||||
{0x0000, 0x00,0,0}
|
||||
};
|
||||
#endif
|
||||
static rk_sensor_user_init_data_s rk_init_data_sensor[RK_CAM_NUM] =
|
||||
{
|
||||
#if CONFIG_SENSOR_IIC_ADDR_0
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = rk_init_data_sensor_reg_0,
|
||||
.rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_0,
|
||||
.rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
|
||||
.rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_0) / sizeof(struct reginfo_t),
|
||||
},
|
||||
#else
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = NULL,
|
||||
.rk_sensor_init_winseq = NULL,
|
||||
.rk_sensor_winseq_size = 0,
|
||||
.rk_sensor_init_data_size = 0,
|
||||
},
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_1
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = rk_init_data_sensor_reg_1,
|
||||
.rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_1,
|
||||
.rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
|
||||
.rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_1) / sizeof(struct reginfo_t),
|
||||
},
|
||||
#else
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = NULL,
|
||||
.rk_sensor_init_winseq = NULL,
|
||||
.rk_sensor_winseq_size = 0,
|
||||
.rk_sensor_init_data_size = 0,
|
||||
},
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_01
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = rk_init_data_sensor_reg_01,
|
||||
.rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_01,
|
||||
.rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_01) / sizeof(struct reginfo_t),
|
||||
.rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_01) / sizeof(struct reginfo_t),
|
||||
},
|
||||
#else
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = NULL,
|
||||
.rk_sensor_init_winseq = NULL,
|
||||
.rk_sensor_winseq_size = 0,
|
||||
.rk_sensor_init_data_size = 0,
|
||||
},
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_02
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = rk_init_data_sensor_reg_02,
|
||||
.rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_02,
|
||||
.rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_02) / sizeof(struct reginfo_t),
|
||||
.rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_02) / sizeof(struct reginfo_t),
|
||||
},
|
||||
#else
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = NULL,
|
||||
.rk_sensor_init_winseq = NULL,
|
||||
.rk_sensor_winseq_size = 0,
|
||||
.rk_sensor_init_data_size = 0,
|
||||
},
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_11
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = rk_init_data_sensor_reg_11,
|
||||
.rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_11,
|
||||
.rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_11) / sizeof(struct reginfo_t),
|
||||
.rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_11) / sizeof(struct reginfo_t),
|
||||
},
|
||||
#else
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = NULL,
|
||||
.rk_sensor_init_winseq = NULL,
|
||||
.rk_sensor_winseq_size = 0,
|
||||
.rk_sensor_init_data_size = 0,
|
||||
},
|
||||
#endif
|
||||
#if CONFIG_SENSOR_IIC_ADDR_12
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = rk_init_data_sensor_reg_12,
|
||||
.rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_12,
|
||||
.rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_12) / sizeof(struct reginfo_t),
|
||||
.rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_12) / sizeof(struct reginfo_t),
|
||||
},
|
||||
#else
|
||||
{
|
||||
.rk_sensor_init_width = INVALID_VALUE,
|
||||
.rk_sensor_init_height = INVALID_VALUE,
|
||||
.rk_sensor_init_bus_param = INVALID_VALUE,
|
||||
.rk_sensor_init_pixelcode = INVALID_VALUE,
|
||||
.rk_sensor_init_data = NULL,
|
||||
.rk_sensor_init_winseq = NULL,
|
||||
.rk_sensor_winseq_size = 0,
|
||||
.rk_sensor_init_data_size = 0,
|
||||
},
|
||||
#endif
|
||||
|
||||
};
|
||||
#include "../../../drivers/media/video/rk30_camera.c"
|
||||
|
||||
#endif /* CONFIG_VIDEO_RK29 */
|
||||
1878
arch/arm/mach-rk30/board-rk3168-86v.c
Normal file
1878
arch/arm/mach-rk30/board-rk3168-86v.c
Normal file
File diff suppressed because it is too large
Load Diff
2017
drivers/input/touchscreen/86v_gt811_ts.c
Normal file
2017
drivers/input/touchscreen/86v_gt811_ts.c
Normal file
File diff suppressed because it is too large
Load Diff
277
drivers/input/touchscreen/86v_gt811_ts.h
Normal file
277
drivers/input/touchscreen/86v_gt811_ts.h
Normal file
|
|
@ -0,0 +1,277 @@
|
|||
/* drivers/input/touchscreen/gt811.h
|
||||
*
|
||||
* Copyright (C) 2010 - 2011 Goodix, Inc.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*Any problem,please contact andrew@goodix.com,+86 755-33338828
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_GT811_H
|
||||
#define _LINUX_GT811_H
|
||||
|
||||
#include <linux/earlysuspend.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
//*************************TouchScreen Work Part*****************************
|
||||
#define GOODIX_I2C_NAME "gt811_ts"
|
||||
#define GT801_PLUS
|
||||
#define GT801_NUVOTON
|
||||
#define GUITAR_UPDATE_STATE 0x02
|
||||
|
||||
//define resolution of the touchscreen
|
||||
#define TOUCH_MAX_HEIGHT 800
|
||||
#define TOUCH_MAX_WIDTH 480
|
||||
//#define STOP_IRQ_TYPE // if define then no stop irq in irq_handle kuuga add 1202S
|
||||
#define REFRESH 0 //0~0x64 Scan rate = 10000/(100+REFRESH)//define resolution of the LCD
|
||||
|
||||
#define SHUTDOWN_PORT RK30_PIN0_PB6// RK2928_PIN0_PD3
|
||||
#define INT_PORT iomux_mode_to_gpio(SPI0_CS1)// RK30_PIN1_PB7//RK2928_PIN1_PB0
|
||||
|
||||
|
||||
#ifdef INT_PORT
|
||||
#define TS_INT gpio_to_irq(INT_PORT) //Interrupt Number,EINT18(119)
|
||||
// #define INT_CFG S3C_GPIO_SFN(3) //IO configer as EINT
|
||||
#else
|
||||
#define TS_INT 0
|
||||
#endif
|
||||
|
||||
/////////////////////////////// UPDATE STEP 5 START /////////////////////////////////////////////////////////////////
|
||||
#define TPD_CHIP_VERSION_C_FIRMWARE_BASE 0x5A
|
||||
#define TPD_CHIP_VERSION_D1_FIRMWARE_BASE 0x7A
|
||||
#define TPD_CHIP_VERSION_E_FIRMWARE_BASE 0x9A
|
||||
#define TPD_CHIP_VERSION_D2_FIRMWARE_BASE 0xBA
|
||||
|
||||
|
||||
/////////////////////////////// UPDATE STEP 5 END /////////////////////////////////////////////////////////////////
|
||||
|
||||
#define FLAG_UP 0
|
||||
#define FLAG_DOWN 1
|
||||
//set GT801 PLUS trigger mode,只能设置0或1
|
||||
//#define INT_TRIGGER 1 // 1=rising 0=falling
|
||||
#define POLL_TIME 10 //actual query spacing interval:POLL_TIME+6
|
||||
|
||||
#define GOODIX_MULTI_TOUCH
|
||||
#ifdef GOODIX_MULTI_TOUCH
|
||||
#define MAX_FINGER_NUM 5
|
||||
#else
|
||||
#define MAX_FINGER_NUM 1
|
||||
#endif
|
||||
|
||||
#if defined(INT_PORT)
|
||||
#if MAX_FINGER_NUM <= 3
|
||||
#define READ_BYTES_NUM 2+2+MAX_FINGER_NUM*5
|
||||
#elif MAX_FINGER_NUM == 4
|
||||
#define READ_BYTES_NUM 2+28
|
||||
#elif MAX_FINGER_NUM == 5
|
||||
#define READ_BYTES_NUM 2+34
|
||||
#endif
|
||||
#else
|
||||
#define READ_BYTES_NUM 2+34
|
||||
#endif
|
||||
|
||||
#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
|
||||
|
||||
#define READ_TOUCH_ADDR_H 0x07
|
||||
#define READ_TOUCH_ADDR_L 0x21 //GT811 0x721
|
||||
#define READ_KEY_ADDR_H 0x07
|
||||
#define READ_KEY_ADDR_L 0x21
|
||||
#define READ_COOR_ADDR_H 0x07
|
||||
#define READ_COOR_ADDR_L 0x22
|
||||
#define READ_ID_ADDR_H 0x00
|
||||
#define READ_ID_ADDR_L 0xff
|
||||
//****************************升级模块参数******************************************
|
||||
|
||||
//******************************************************************************
|
||||
struct gt811_ts_data {
|
||||
uint16_t addr;
|
||||
uint8_t bad_data;
|
||||
struct i2c_client *client;
|
||||
struct input_dev *input_dev;
|
||||
int use_reset; //use RESET flag
|
||||
int use_irq; //use EINT flag
|
||||
int read_mode; //read moudle mode,20110221 by andrew
|
||||
struct hrtimer timer;
|
||||
struct work_struct work;
|
||||
char phys[32];
|
||||
int retry;
|
||||
int irq;
|
||||
spinlock_t irq_lock; //add by kuuga
|
||||
int irq_is_disable; /* 0: irq enable */ //add by kuuga
|
||||
uint16_t abs_x_max;
|
||||
uint16_t abs_y_max;
|
||||
uint8_t max_touch_num;
|
||||
uint8_t int_trigger_type;
|
||||
uint8_t btn_state; // key states
|
||||
/////////////////////////////// UPDATE STEP 6 START /////////////////////////////////////////////////////////////////
|
||||
unsigned int version;
|
||||
/////////////////////////////// UPDATE STEP 6 END /////////////////////////////////////////////////////////////////
|
||||
|
||||
struct early_suspend early_suspend;
|
||||
int (*power)(struct gt811_ts_data * ts, int on);
|
||||
};
|
||||
|
||||
//*****************************End of Part I *********************************
|
||||
|
||||
//*************************Touchkey Surpport Part*****************************
|
||||
/*#define HAVE_TOUCH_KEY
|
||||
//#define READ_KEY_VALUE
|
||||
//#define READ_KEY_COOR
|
||||
|
||||
#ifdef HAVE_TOUCH_KEY
|
||||
const uint16_t toucher_key_array[]={
|
||||
KEY_MENU, //MENU
|
||||
KEY_HOME,
|
||||
KEY_BACK,
|
||||
KEY_SEARCH
|
||||
};
|
||||
#define MAX_KEY_NUM (sizeof(toucher_key_array)/sizeof(toucher_key_array[0]))
|
||||
#endif
|
||||
*/
|
||||
//#define COOR_TO_KEY
|
||||
#ifdef COOR_TO_KEY
|
||||
|
||||
#define KEY_X 40
|
||||
#define KEY_Y 20
|
||||
#if 0
|
||||
#define AREA_X 0
|
||||
#else
|
||||
#define AREA_Y 800
|
||||
#endif
|
||||
|
||||
enum {x, y};
|
||||
s32 key_center[MAX_KEY_NUM][2] = {
|
||||
|
||||
{48,840},{124,840},{208,840},{282,840}
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
//*****************************End of Part II*********************************
|
||||
|
||||
/////////////////////////////// UPDATE STEP 7 START /////////////////////////////////////////////////////////////////
|
||||
//*************************Firmware Update part*******************************
|
||||
//#define AUTO_UPDATE_GT811
|
||||
|
||||
#define CONFIG_TOUCHSCREEN_GOODIX_IAP
|
||||
#ifdef CONFIG_TOUCHSCREEN_GOODIX_IAP
|
||||
static int goodix_update_write(struct file *filp, const char __user *buff, unsigned long len, void *data);
|
||||
static int goodix_update_read( char *page, char **start, off_t off, int count, int *eof, void *data );
|
||||
|
||||
#define PACK_SIZE 64 //update file package size
|
||||
//#define MAX_TIMEOUT 30000 //update time out conut
|
||||
//#define MAX_I2C_RETRIES 10 //i2c retry times
|
||||
|
||||
//write cmd
|
||||
#define APK_UPDATE_TP 1
|
||||
#define APK_READ_FUN 10
|
||||
#define APK_WRITE_CFG 11
|
||||
|
||||
//fun cmd
|
||||
//#define CMD_DISABLE_TP 0
|
||||
//#define CMD_ENABLE_TP 1
|
||||
#define CMD_READ_VER 2
|
||||
#define CMD_READ_RAW 3
|
||||
#define CMD_READ_DIF 4
|
||||
#define CMD_READ_CFG 5
|
||||
#define CMD_READ_CHIP_TYPE 6
|
||||
//#define CMD_SYS_REBOOT 101
|
||||
|
||||
//read mode
|
||||
#define MODE_RD_VER 1
|
||||
#define MODE_RD_RAW 2
|
||||
#define MODE_RD_DIF 3
|
||||
#define MODE_RD_CFG 4
|
||||
#define MODE_RD_CHIP_TYPE 5
|
||||
|
||||
#if 0
|
||||
struct tpd_firmware_info_t
|
||||
{
|
||||
int magic_number_1;
|
||||
int magic_number_2;
|
||||
unsigned short version;
|
||||
unsigned short length;
|
||||
unsigned short checksum;
|
||||
unsigned char data;
|
||||
};
|
||||
#else
|
||||
#pragma pack(1)
|
||||
struct tpd_firmware_info_t
|
||||
{
|
||||
unsigned char chip_type;
|
||||
unsigned short version;
|
||||
unsigned char rom_version;
|
||||
unsigned char reserved[3];
|
||||
unsigned short start_addr;
|
||||
unsigned short length;
|
||||
unsigned char checksum[3];
|
||||
unsigned char mandatory_flag[6];
|
||||
unsigned char data;
|
||||
};
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#define NVRAM_LEN 0x0FF0 // nvram total space
|
||||
#define NVRAM_BOOT_SECTOR_LEN 0x0100 // boot sector
|
||||
#define NVRAM_UPDATE_START_ADDR 0x4100
|
||||
|
||||
#define BIT_NVRAM_STROE 0
|
||||
#define BIT_NVRAM_RECALL 1
|
||||
#define BIT_NVRAM_LOCK 2
|
||||
#define REG_NVRCS_H 0X12
|
||||
#define REG_NVRCS_L 0X01
|
||||
#define GT811_SET_INT_PIN( level ) gpio_direction_output(INT_PORT, level) //null macro now
|
||||
#endif
|
||||
//*****************************End of Part III********************************
|
||||
/////////////////////////////// UPDATE STEP 7 END /////////////////////////////////////////////////////////////////
|
||||
|
||||
struct gt811_platform_data {
|
||||
uint32_t version; /* Use this entry for panels with */
|
||||
u16 model; /* 801. */
|
||||
bool swap_xy; /* swap x and y axes */
|
||||
u16 x_min, x_max;
|
||||
u16 y_min, y_max;
|
||||
bool x_reverse, y_reverse;
|
||||
int (*get_pendown_state)(void);
|
||||
int (*init_platform_hw)(void);
|
||||
int (*platform_sleep)(void);
|
||||
int (*platform_wakeup)(void);
|
||||
void (*exit_platform_hw)(void);
|
||||
int gpio_reset;
|
||||
bool gpio_reset_active_low;
|
||||
|
||||
|
||||
//reservation
|
||||
};
|
||||
|
||||
#define RAW_DATA_READY 1
|
||||
#define RAW_DATA_NON_ACTIVE 0xffffffff
|
||||
#define RAW_DATA_ACTIVE 0
|
||||
|
||||
|
||||
enum CHIP_TYPE
|
||||
{
|
||||
GT800 = 1,
|
||||
GT800PLUS,
|
||||
GT800PLUS3,
|
||||
GT816,
|
||||
GT811,
|
||||
GT8105,
|
||||
GT8110,
|
||||
GT818PLUS
|
||||
};
|
||||
|
||||
|
||||
#endif /* _LINUX_GOODIX_TOUCH_H */
|
||||
|
|
@ -979,7 +979,11 @@ config TOUCHSCREEN_GT801_IIC
|
|||
config TOUCHSCREEN_GT811_IIC
|
||||
tristate "GT811_IIC based touchscreens"
|
||||
depends on I2C2_RK29 || I2C2_RK30
|
||||
|
||||
|
||||
config TOUCHSCREEN_86V_GT811_IIC
|
||||
tristate "RK3168_86V GT811_IIC based touchscreens"
|
||||
depends on I2C2_RK29 || I2C2_RK30
|
||||
|
||||
config TOUCHSCREEN_GT82X_IIC
|
||||
tristate "GT82x_IIC based touchscreens"
|
||||
depends on I2C2_RK30
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ obj-$(CONFIG_ATMEL_MXT224) += atmel_maxtouch.o
|
|||
obj-$(CONFIG_ATMEL_MXT1386) += atmel_mxt1386.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_GT801_IIC) += gt801_ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_GT811_IIC) += gt811_ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_86V_GT811_IIC) += 86v_gt811_ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_GT82X_IIC) += goodix_touch_82x.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_GT818_IIC) += gt818_ts.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_GT8110) += gt8110_ts.o
|
||||
|
|
|
|||
|
|
@ -99,6 +99,9 @@ config LCD_RK2928_A720
|
|||
bool "RK2928 A720 panel 800x480"
|
||||
config LCD_RK2926_V86
|
||||
bool "RK2926 v86 panel 800x480"
|
||||
config LCD_RK3168_86V
|
||||
bool "RK3168 86v panel 800x480"
|
||||
config LCD_HJ080NA
|
||||
config LCD_HJ080NA
|
||||
bool "HJ080NA_4J 1024X768"
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ obj-$(CONFIG_LCD_HV070WSA100) += lcd_hv070wsa.o
|
|||
obj-$(CONFIG_LCD_COMMON) += lcd_common.o
|
||||
obj-$(CONFIG_LCD_RK2928_A720) += lcd_YQ70CPT9160.o
|
||||
obj-$(CONFIG_LCD_RK2926_V86) += lcd_YQ70CPT9160_v86.o
|
||||
obj-$(CONFIG_LCD_RK3168_86V) += lcd_YQ70CPT9160_rk3168_86v.o
|
||||
obj-$(CONFIG_LCD_HSD07PFW1) += lcd_hsd07pfw1.o
|
||||
obj-$(CONFIG_LCD_HJ080NA) += lcd_hj080na.o
|
||||
obj-$(CONFIG_LCD_HJ101NA) += lcd_hj101na.o
|
||||
|
|
|
|||
195
drivers/video/display/screen/lcd_YQ70CPT9160_rk3168_86v.c
Normal file
195
drivers/video/display/screen/lcd_YQ70CPT9160_rk3168_86v.c
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/* This Lcd Driver is HSD070IDW1 write by cst 2009.10.27 */
|
||||
#include <linux/fb.h>
|
||||
#include <linux/rk_fb.h>
|
||||
#include <linux/delay.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/iomux.h>
|
||||
#include <mach/board.h>
|
||||
#include "screen.h"
|
||||
#include <linux/hdmi.h>
|
||||
//#include "../../rk29_fb.h"
|
||||
#include "../transmitter/rk610_lcd.h"
|
||||
|
||||
/* Base */
|
||||
#define OUT_TYPE SCREEN_RGB
|
||||
#define OUT_FACE OUT_P888
|
||||
#define OUT_CLK 33000000
|
||||
#define LCDC_ACLK 150000000 //29 lcdc axi DMA ƵÂÊ
|
||||
|
||||
/* Timing */
|
||||
#define H_PW 30//48 //10
|
||||
#define H_BP 10//40 //100
|
||||
#define H_VD 800 //1024
|
||||
#define H_FP 210// //210
|
||||
|
||||
#define V_PW 13//10
|
||||
#define V_BP 10// //10
|
||||
#define V_VD 480 //768
|
||||
#define V_FP 22 //18
|
||||
|
||||
#define LCD_WIDTH 154
|
||||
#define LCD_HEIGHT 85
|
||||
|
||||
/* Other */
|
||||
#define DCLK_POL 0
|
||||
#define SWAP_RB 0
|
||||
#ifdef CONFIG_HDMI_DUAL_DISP
|
||||
static int set_scaler_info(struct rk29fb_screen *screen, u8 hdmi_resolution)
|
||||
{
|
||||
screen->s_clk_inv = S_DCLK_POL;
|
||||
screen->s_den_inv = 0;
|
||||
screen->s_hv_sync_inv = 0;
|
||||
switch(hdmi_resolution){
|
||||
case HDMI_1920x1080p_60Hz:
|
||||
/* Scaler Timing */
|
||||
screen->hdmi_resolution = hdmi_resolution;
|
||||
screen->s_pixclock = S_OUT_CLK;
|
||||
screen->s_hsync_len = S_H_PW;
|
||||
screen->s_left_margin = S_H_BP;
|
||||
screen->s_right_margin = S_H_FP;
|
||||
screen->s_hsync_len = S_H_PW;
|
||||
screen->s_upper_margin = S_V_BP;
|
||||
screen->s_lower_margin = S_V_FP;
|
||||
screen->s_vsync_len = S_V_PW;
|
||||
screen->s_hsync_st = S_H_ST;
|
||||
screen->s_vsync_st = S_V_ST;
|
||||
break;
|
||||
case HDMI_1920x1080p_50Hz:
|
||||
/* Scaler Timing */
|
||||
screen->hdmi_resolution = hdmi_resolution;
|
||||
screen->s_pixclock = S1_OUT_CLK;
|
||||
screen->s_hsync_len = S1_H_PW;
|
||||
screen->s_left_margin = S1_H_BP;
|
||||
screen->s_right_margin = S1_H_FP;
|
||||
screen->s_hsync_len = S1_H_PW;
|
||||
screen->s_upper_margin = S1_V_BP;
|
||||
screen->s_lower_margin = S1_V_FP;
|
||||
screen->s_vsync_len = S1_V_PW;
|
||||
screen->s_hsync_st = S1_H_ST;
|
||||
screen->s_vsync_st = S1_V_ST;
|
||||
break;
|
||||
case HDMI_1280x720p_60Hz:
|
||||
/* Scaler Timing */
|
||||
screen->hdmi_resolution = hdmi_resolution;
|
||||
screen->s_pixclock = S2_OUT_CLK;
|
||||
screen->s_hsync_len = S2_H_PW;
|
||||
screen->s_left_margin = S2_H_BP;
|
||||
screen->s_right_margin = S2_H_FP;
|
||||
screen->s_hsync_len = S2_H_PW;
|
||||
screen->s_upper_margin = S2_V_BP;
|
||||
screen->s_lower_margin = S2_V_FP;
|
||||
screen->s_vsync_len = S2_V_PW;
|
||||
screen->s_hsync_st = S2_H_ST;
|
||||
screen->s_vsync_st = S2_V_ST;
|
||||
break;
|
||||
case HDMI_1280x720p_50Hz:
|
||||
/* Scaler Timing */
|
||||
screen->hdmi_resolution = hdmi_resolution;
|
||||
screen->s_pixclock = S3_OUT_CLK;
|
||||
screen->s_hsync_len = S3_H_PW;
|
||||
screen->s_left_margin = S3_H_BP;
|
||||
screen->s_right_margin = S3_H_FP;
|
||||
screen->s_hsync_len = S3_H_PW;
|
||||
screen->s_upper_margin = S3_V_BP;
|
||||
screen->s_lower_margin = S3_V_FP;
|
||||
screen->s_vsync_len = S3_V_PW;
|
||||
screen->s_hsync_st = S3_H_ST;
|
||||
screen->s_vsync_st = S3_V_ST;
|
||||
break;
|
||||
case HDMI_720x576p_50Hz_4x3:
|
||||
case HDMI_720x576p_50Hz_16x9:
|
||||
/* Scaler Timing */
|
||||
screen->hdmi_resolution = hdmi_resolution;
|
||||
screen->s_pixclock = S4_OUT_CLK;
|
||||
screen->s_hsync_len = S4_H_PW;
|
||||
screen->s_left_margin = S4_H_BP;
|
||||
screen->s_right_margin = S4_H_FP;
|
||||
screen->s_hsync_len = S4_H_PW;
|
||||
screen->s_upper_margin = S4_V_BP;
|
||||
screen->s_lower_margin = S4_V_FP;
|
||||
screen->s_vsync_len = S4_V_PW;
|
||||
screen->s_hsync_st = S4_H_ST;
|
||||
screen->s_vsync_st = S4_V_ST;
|
||||
break;
|
||||
case HDMI_720x480p_60Hz_16x9:
|
||||
case HDMI_720x480p_60Hz_4x3:
|
||||
/* Scaler Timing */
|
||||
screen->hdmi_resolution = hdmi_resolution;
|
||||
screen->s_pixclock = S5_OUT_CLK;
|
||||
screen->s_hsync_len = S5_H_PW;
|
||||
screen->s_left_margin = S5_H_BP;
|
||||
screen->s_right_margin = S5_H_FP;
|
||||
screen->s_hsync_len = S5_H_PW;
|
||||
screen->s_upper_margin = S5_V_BP;
|
||||
screen->s_lower_margin = S5_V_FP;
|
||||
screen->s_vsync_len = S5_V_PW;
|
||||
screen->s_hsync_st = S5_H_ST;
|
||||
screen->s_vsync_st = S5_V_ST;
|
||||
break;
|
||||
default :
|
||||
printk("%s lcd not support dual display at this hdmi resolution %d \n",__func__,hdmi_resolution);
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static int set_scaler_info(struct rk29fb_screen *screen, u8 hdmi_resolution){}
|
||||
#endif
|
||||
|
||||
void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info )
|
||||
{
|
||||
/* screen type & face */
|
||||
screen->type = OUT_TYPE;
|
||||
screen->face = OUT_FACE;
|
||||
|
||||
/* Screen size */
|
||||
screen->x_res = H_VD;
|
||||
screen->y_res = V_VD;
|
||||
|
||||
screen->width = LCD_WIDTH;
|
||||
screen->height = LCD_HEIGHT;
|
||||
|
||||
/* Timing */
|
||||
screen->lcdc_aclk = LCDC_ACLK;
|
||||
screen->pixclock = OUT_CLK;
|
||||
screen->left_margin = H_BP;
|
||||
screen->right_margin = H_FP;
|
||||
screen->hsync_len = H_PW;
|
||||
screen->upper_margin = V_BP;
|
||||
screen->lower_margin = V_FP;
|
||||
screen->vsync_len = V_PW;
|
||||
|
||||
/* Pin polarity */
|
||||
screen->pin_hsync = 0;
|
||||
screen->pin_vsync = 0;
|
||||
screen->pin_den = 0;
|
||||
screen->pin_dclk = DCLK_POL;
|
||||
|
||||
/* Swap rule */
|
||||
screen->swap_rb = SWAP_RB;
|
||||
screen->swap_rg = 0;
|
||||
screen->swap_gb = 0;
|
||||
screen->swap_delta = 0;
|
||||
screen->swap_dumy = 0;
|
||||
|
||||
/* Operation function*/
|
||||
/*screen->init = init;*/
|
||||
screen->init = NULL;
|
||||
screen->standby = NULL;
|
||||
screen->sscreen_get = set_scaler_info;
|
||||
#ifdef CONFIG_RK610_LVDS
|
||||
screen->sscreen_set = rk610_lcd_scaler_set_param;
|
||||
#endif
|
||||
}
|
||||
size_t get_fb_size(void)
|
||||
{
|
||||
size_t size = 0;
|
||||
#if defined(CONFIG_THREE_FB_BUFFER)
|
||||
size = ((H_VD)*(V_VD)<<2)* 3; //three buffer
|
||||
#else
|
||||
size = ((H_VD)*(V_VD)<<2)<<1; //two buffer
|
||||
#endif
|
||||
return ALIGN(size,SZ_1M);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user