fix fb soft rending, ts

This commit is contained in:
Angell Fear
2010-09-22 21:11:15 +06:00
parent b0afbbbb1d
commit 467299d85c
11 changed files with 378 additions and 294 deletions

View File

@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.33
# Mon Aug 23 14:03:45 2010
# Sat Sep 11 04:31:01 2010
#
CONFIG_ARM=y
CONFIG_HAVE_PWM=y
@@ -64,7 +64,7 @@ CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_RT_GROUP_SCHED=y
CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
CONFIG_CGROUPS=y
@@ -85,17 +85,17 @@ CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="../ramfs-android"
CONFIG_INITRAMFS_SOURCE="../ramfs-android/"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_RD_GZIP=y
# CONFIG_RD_BZIP2 is not set
CONFIG_RD_LZMA=y
# CONFIG_RD_LZMA is not set
# CONFIG_RD_LZO is not set
# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
CONFIG_INITRAMFS_COMPRESSION_GZIP=y
# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
CONFIG_INITRAMFS_COMPRESSION_LZMA=y
# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
@@ -104,7 +104,6 @@ CONFIG_EMBEDDED=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
@@ -138,7 +137,6 @@ CONFIG_HAVE_CLK=y
#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
# CONFIG_SLOW_WORK is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
@@ -305,6 +303,8 @@ CONFIG_G900_KBR=y
CONFIG_G900_BUTTON=y
CONFIG_G900_LEDS=y
CONFIG_G900_PHONE=y
CONFIG_G900_POWER_BUTTON=y
CONFIG_G900_FLASH=y
CONFIG_PXA27x=y
CONFIG_PXA_SSP=y
CONFIG_PLAT_PXA=y
@@ -389,7 +389,7 @@ CONFIG_KEXEC=y
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_DEBUG=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
@@ -427,8 +427,7 @@ CONFIG_HAVE_AOUT=y
# Power management options
#
CONFIG_PM=y
CONFIG_PM_DEBUG=y
CONFIG_PM_VERBOSE=y
# CONFIG_PM_DEBUG is not set
# CONFIG_SUSPEND is not set
CONFIG_HAS_WAKELOCK=y
CONFIG_HAS_EARLYSUSPEND=y
@@ -539,14 +538,13 @@ CONFIG_WEXT_SPY=y
CONFIG_CFG80211=y
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_REG_DEBUG=y
# CONFIG_CFG80211_REG_DEBUG is not set
CONFIG_CFG80211_DEFAULT_PS=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_WIRELESS_OLD_REGULATORY=y
CONFIG_CFG80211_WEXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=y
CONFIG_LIB80211_DEBUG=y
# CONFIG_LIB80211_DEBUG is not set
CONFIG_MAC80211=y
# CONFIG_MAC80211_RC_PID is not set
# CONFIG_MAC80211_RC_MINSTREL is not set
@@ -555,7 +553,6 @@ CONFIG_MAC80211=y
CONFIG_MAC80211_RC_DEFAULT=""
CONFIG_MAC80211_MESH=y
# CONFIG_MAC80211_LEDS is not set
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
# CONFIG_WIMAX is not set
CONFIG_RFKILL=y
@@ -578,11 +575,96 @@ CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE="libertas/gspi8385_hlp.bin libertas/gspi8385.bin"
CONFIG_EXTRA_FIRMWARE_DIR="../FW"
CONFIG_DEBUG_DRIVER=y
CONFIG_DEBUG_DEVRES=y
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
# CONFIG_MTD is not set
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_CONCAT is not set
# CONFIG_MTD_PARTITIONS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
# CONFIG_MTD_BLKDEVS is not set
# CONFIG_MTD_BLOCK is not set
# CONFIG_MTD_BLOCK_RO is not set
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
# CONFIG_SSFDC is not set
# CONFIG_MTD_OOPS is not set
#
# RAM/ROM/Flash chip drivers
#
# CONFIG_MTD_CFI is not set
# CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
# CONFIG_MTD_RAM is not set
CONFIG_MTD_ROM=y
# CONFIG_MTD_ABSENT is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_MTD_PHYSMAP=y
# CONFIG_MTD_PHYSMAP_COMPAT is not set
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
# CONFIG_MTD_DATAFLASH is not set
# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SST25L is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
CONFIG_MTD_NAND=y
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_GPIO is not set
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_DISKONCHIP=m
# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
# CONFIG_MTD_NAND_SHARPSL is not set
# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set
#
# LPDDR flash memory drivers
#
# CONFIG_MTD_LPDDR is not set
#
# UBI - Unsorted block images
#
# CONFIG_MTD_UBI is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
@@ -689,7 +771,7 @@ CONFIG_LIBERTAS=y
# CONFIG_LIBERTAS_USB is not set
# CONFIG_LIBERTAS_SDIO is not set
CONFIG_LIBERTAS_SPI=m
CONFIG_LIBERTAS_DEBUG=y
# CONFIG_LIBERTAS_DEBUG is not set
# CONFIG_P54_COMMON is not set
# CONFIG_RT2X00 is not set
# CONFIG_WL12XX is not set
@@ -874,7 +956,6 @@ CONFIG_I2C_PXA=y
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
CONFIG_SPI=y
CONFIG_SPI_DEBUG=y
CONFIG_SPI_MASTER=y
#
@@ -898,7 +979,6 @@ CONFIG_SPI_SPIDEV=y
# CONFIG_PPS is not set
CONFIG_ARCH_REQUIRE_GPIOLIB=y
CONFIG_GPIOLIB=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
#
@@ -929,7 +1009,7 @@ CONFIG_GPIO_SYSFS=y
#
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
CONFIG_POWER_SUPPLY_DEBUG=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=y
CONFIG_APM_POWER=y
# CONFIG_BATTERY_DS2760 is not set
@@ -1074,9 +1154,7 @@ CONFIG_SND_JACK=y
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_VERBOSE=y
CONFIG_SND_PCM_XRUN_DEBUG=y
# CONFIG_SND_DEBUG is not set
CONFIG_SND_VMASTER=y
# CONFIG_SND_RAWMIDI_SEQ is not set
# CONFIG_SND_OPL3_LIB_SEQ is not set
@@ -1159,7 +1237,7 @@ CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
CONFIG_USB=y
CONFIG_USB_DEBUG=y
# CONFIG_USB_DEBUG is not set
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
#
@@ -1210,7 +1288,7 @@ CONFIG_USB_ACM=m
# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=m
CONFIG_USB_STORAGE_DEBUG=y
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_DATAFAB=m
CONFIG_USB_STORAGE_FREECOM=m
CONFIG_USB_STORAGE_ISD200=m
@@ -1266,7 +1344,7 @@ CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_NAVMAN is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_OTI6858 is not set
CONFIG_USB_SERIAL_QUALCOMM=m
# CONFIG_USB_SERIAL_QUALCOMM is not set
# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set
@@ -1305,9 +1383,7 @@ CONFIG_USB_SERIAL_QUALCOMM=m
# CONFIG_USB_ISIGHTFW is not set
# CONFIG_USB_VST is not set
CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_DEBUG_FS=y
CONFIG_USB_GADGET_VBUS_DRAW=100
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AT91 is not set
@@ -1658,64 +1734,14 @@ CONFIG_FRAME_WARN=1024
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_SHIRQ=y
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_DETECT_HUNG_TASK=y
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
CONFIG_SCHED_DEBUG=y
CONFIG_SCHEDSTATS=y
CONFIG_TIMER_STATS=y
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_SELFTEST=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_DEBUG_SLAB=y
CONFIG_DEBUG_SLAB_LEAK=y
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
CONFIG_DEBUG_SPINLOCK=y
CONFIG_DEBUG_MUTEXES=y
CONFIG_DEBUG_LOCK_ALLOC=y
CONFIG_PROVE_LOCKING=y
CONFIG_LOCKDEP=y
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_LOCKDEP=y
CONFIG_TRACE_IRQFLAGS=y
CONFIG_DEBUG_SPINLOCK_SLEEP=y
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_KERNEL is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_VM is not set
CONFIG_DEBUG_WRITECOUNT=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_DEBUG_LIST=y
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_NOTIFIERS=y
CONFIG_DEBUG_CREDENTIALS=y
CONFIG_BOOT_PRINTK_DELAY=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_MEMORY_INIT is not set
CONFIG_RCU_CPU_STALL_DETECTOR=y
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
CONFIG_DEBUG_PAGEALLOC=y
CONFIG_WANT_PAGE_DEBUG_FLAGS=y
CONFIG_PAGE_POISONING=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
@@ -1732,17 +1758,10 @@ CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_KMEMTRACE is not set
# CONFIG_WORKQUEUE_TRACER is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
CONFIG_DYNAMIC_DEBUG=y
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
CONFIG_ARM_UNWIND=y
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_STACK_USAGE=y
CONFIG_DEBUG_LL=y
CONFIG_EARLY_PRINTK=y
# CONFIG_DEBUG_ICEDCC is not set
# CONFIG_DEBUG_USER is not set
# CONFIG_OC_ETM is not set
#
@@ -1872,7 +1891,8 @@ CONFIG_ZLIB_INFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_REED_SOLOMON=m
CONFIG_REED_SOLOMON_DEC16=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y

View File

@@ -43,3 +43,9 @@ config G900_POWER_BUTTON
depends on MACH_G900
---help---
This is a POWER Buttons driver for G900
config G900_FLASH
tristate "G900 mDOC G4 flash Experemental"
depends on MACH_G900
---help---
This is a mDOC flash driver for G900

View File

@@ -4,4 +4,5 @@ obj-$(CONFIG_G900_BUTTON) += g900_buttons.o
obj-$(CONFIG_G900_POWER_BUTTON) += g900_pwr_btn.o
obj-$(CONFIG_G900_LEDS) += g900_leds.o
obj-$(CONFIG_G900_PHONE) += g900_msm6280.o
#obj-$(CONFIG_G900_FLASH) += ttfs/
obj-m += ttfs/

View File

@@ -28,10 +28,6 @@
#include <linux/gpio_keys.h>
#include <linux/pda_power.h>
//#include <linux/mtd/mtd.h>
//#include <linux/mtd/map.h>
//#include <linux/mtd/partitions.h>
//#include <linux/mtd/physmap.h>
#include <asm/gpio.h>
#include <asm/mach-types.h>
@@ -153,12 +149,6 @@ d- = USBC_N(C 20)
/* Leds
G900_CFG_OUT(GPIO16_LED_nVibra, AF0, DRIVE_HIGH), // or should be GPIO16_PWM0_OUT ?
G900_CFG_OUT(GPIO37_LED_nFlash, AF0, DRIVE_HIGH), // it can't be GPIO37_USB_P2_8 ?
G900_CFG_OUT(GPIO85_LED_nKeyboard, AF0, DRIVE_HIGH),
G900_CFG_OUT(GPIO86_LED_nKeypad, AF0, DRIVE_HIGH),
*/
/* Lcd backlight */
GPIO17_PWM1_OUT,
@@ -497,7 +487,7 @@ static void __init spi_init(void)
}
/* DEBUG */
/* +++++++++++++++++++++++++++++++++++++++++DEBUG ++++++++++++++++++++++++++++++++++++++++++*/
static void __init debuging(void)
{
@@ -505,6 +495,18 @@ static void __init debuging(void)
}
/*
* NOR flash
*/
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/physmap.h>
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!DEBUG !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
@@ -582,6 +584,8 @@ static struct platform_device g900_pwr_button = {
.name = "g900-power-button",
};
static struct platform_device g900_sound = {
.name = "g900-wm9714",
.id = -1,
@@ -617,6 +621,7 @@ static struct platform_device *g900_devices[] __initdata = {
&g900_ts,
&pxa2xx_pcm,
&g900_sound,
//&g900_flash,
};
static void __init g900_map_io(void)
@@ -637,12 +642,27 @@ static void fix_msc(void)
* Localbus setup:
* CS0: ;
* CS1: ;
* CS2: ;
* CS3: -;
* CS4: ???.
* CS5: gsm.
*/
MSC0 = 0x7ff09888;
MSC1 = 0x000089c4;
MSC2 = 0x5ff95ff9;
MDREFR = 0x2013a01e;
/*WinCe
MDCNFG : 0xa80009d7 = 10101000 00000000 00001001 11010111
MDREFR : 0x2013a01e = 00100000 00010011 10100000 00011110
MSC0 : 0x7ff09888 = 01111111 11110000 10011000 10001000
MSC1 : 0x000089c4 = 00000000 00000000 10001001 11000100
MSC2 : 0x5ff95ff9 = 01011111 11111001 01011111 11111001
MECR : 0x00000001 = 00000000 00000000 00000000 00000001
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210
*/
}

View File

@@ -68,13 +68,13 @@ static struct gpio_led gpio_leds[] = {
.gpio = GPIO16_LED_nVibra,
.name = "vibrator",
.active_low = 0,
.max_timeout = 4000,
.max_timeout = 15000,
},
{
.gpio = GPIO37_LED_nFlash,
.name = "flash",
.active_low = 0,
.max_timeout = 4000,
.max_timeout = 15000,
},
};
static struct timed_gpio_platform_data g900_timed_gpio_data = {

View File

@@ -1,8 +1,8 @@
/*
* drivers/input/touchscreen/ak4183.c
*
* Copyright (c) 2010 Angell
* Angell Fear <angell@angellfear.ru>
* Copyright (c) 2010 SashaG <...>
* Copyright (c) 2010 Fear <angell@angellfear.ru>
*
* Using code from:
* tsc2007.c
@@ -28,13 +28,12 @@
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/i2c.h>
#include <linux/delay.h>
#include <linux/i2c/ak4183.h>
#define TS_POLL_DELAY 10 /* us delay between samples */
#define TS_POLL_PERIOD 100 /* us delay between samples */
#define AK4183_12BIT 1 /* 12 bit mode */
#define TS_POLL_PERIOD 1000 /* us delay between samples */
#define AK4183_12BIT 1 /*12 bit resolution*/
#define devdbg(x...) printk(x)
@@ -44,7 +43,7 @@
#define AK4183_BIT_A1 (0x1 << 5)
#define AK4183_BIT_A0 (0x1 << 4)
#define AK4183_BIT_PD0 (0x1 << 2)
#define AK4183_BIT_MODE (0x1 << 1)
#define AK4183_BIT_R8BIT (0x1 << 1)
#define MAX_12BIT ((1 << 12) - 1)
@@ -52,10 +51,21 @@
#if AK4183_12BIT
#define ADC_ON_12BIT 0
#else
#define ADC_ON_12BIT AK4183_BIT_MODE
#define ADC_ON_12BIT AK4183_BIT_R8BIT
#endif
/*
BIT Name Function
7 S Start Bit. “1” Accelerate and Axis Command, “0”: Sleep mode Command
6-4 A2-A0 Channel Selection Bits. Analog inputs to the A/D converter and the activated driver switches are
selected. Please see the following table for the detail.
3 X1 Dont care
2 PD0 Power down bit (refer to power-down control)
1 MODE Resolution of A/D converter. “0”: 12 bit output “1”: 8 bit output
0 X2 Dont care
*/
#define READ_X ( ADC_ON_12BIT | AK4183_BIT_S | AK4183_BIT_A2 )
#define READ_Y ( ADC_ON_12BIT | AK4183_BIT_S | AK4183_BIT_A0 | AK4183_BIT_A2 )
#define READ_Z1 ( ADC_ON_12BIT | AK4183_BIT_S | AK4183_BIT_A1 | AK4183_BIT_A2 )
@@ -68,25 +78,38 @@
#define PWRDOWN ( AK4183_BIT_S | AK4183_BIT_PD0 )
/*
BIT Name Function
7 S Start Bit. <20>1<EFBFBD> Accelerate and Axis Command, <20>0<EFBFBD>: Sleep mode Command
6-4 A2-A0 Channel Selection Bits. Analog inputs to the A/D converter and the activated driver switches are
selected. Please see the following table for the detail.
3 X1 Don<6F>t care
2 PD0 Power down bit (refer to power-down control)
1 MODE Resolution of A/D converter. <20>0<EFBFBD>: 12 bit output <20>1<EFBFBD>: 8 bit output
0 X2 Don<6F>t care
*/
#define samples 200
////touch calib test data
#define tmc_ax -11
//-0,05705; *200
#define tmc_bx 566382
//2831,91107; *200
#define tmc_x0 450
//450;
#define tmc_x10 476382
//bx-x0
#define tmc_ax_m_x0 -5135
//ax*x0
#define tmc_ay -11
//-0,05579;
#define tmc_by 593736
//2968,68213 *200
#define tmc_y0 440
//440;
#define tmc_y10 505736
//bx-x0
#define tmc_ay_m_y0 -4910
//ay*y0
struct ts_event {
u16 x;
u16 y;
u16 z1, z2;
u32 prs;
};
struct ak4183 {
@@ -98,7 +121,6 @@ struct ak4183 {
u16 model;
u16 x_plate_ohms;
u16 y_plate_ohms;
bool pendown;
int irq;
@@ -108,29 +130,28 @@ struct ak4183 {
};
/*
0 4000 left 32 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 419
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> X=0x0150 Y=0x0ee0 P=0x0106
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> X=0x0e50 Y=0x0ee0 P=0x0104
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> X=0x0110 Y=0x0090 P=0x00ea
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> X=0x0dc0 Y=0x0080 P=0x00ec
0 4000 left 32 право 419
верх лево X=0x0150 Y=0x0ee0 P=0x0106
верх право X=0x0e50 Y=0x0ee0 P=0x0104
низ лево X=0x0110 Y=0x0090 P=0x00ea
низ право X=0x0dc0 Y=0x0080 P=0x00ec
wince
CalibrationData 2174,1990 563,3553 700,465 3463,506 3440,3547
wince hex
CalibrationData 0x87E,0x7C6 0x233,0xDE1 0x2BC,0x1D1 0xD87,0x1FA 0xD70,0xDDB
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD> <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
середина, верх лево,низ лево,низ право, верх право
*/
static int abs_x[3] = {0x0110, 0x0dc0, 1};
static int abs_x[3] = {0x0110, 0x0dc0, 20};
module_param_array(abs_x, int, NULL, 0);
MODULE_PARM_DESC(abs_x, "Touchscreen absolute X min, max, fuzz");
static int abs_y[3] = {0x0ee0, 0x0080, 1};
static int abs_y[3] = {0x0ee0, 0x0080, 20};
module_param_array(abs_y, int, NULL, 0);
MODULE_PARM_DESC(abs_y, "Touchscreen absolute Y min, max, fuzz");
static int abs_p[3] = {0, MAX_12BIT, 0};
static int abs_p[3] = {0, 0xfff, 2};
module_param_array(abs_p, int, NULL, 0);
MODULE_PARM_DESC(abs_p, "Touchscreen absolute Pressure min, max, fuzz");
@@ -151,79 +172,48 @@ static inline int ak4183_xfer(struct ak4183 *tsc, u8 cmd)
* Where DataLow has [D11-D4], DataHigh has [D3-D0 << 4 | Dummy 4bit].
*/
val = swab16(data) >> 4;
devdbg("data: 0x%x, val: 0x%x\n", data, val);
//dev_dbg(&tsc->client->dev, "data: 0x%x, val: 0x%x\n", data, val);
return val;
}
static void ak4183_read_values(struct ak4183 *tsc, struct ts_event *tc)
static u32 ak4183_read_values(struct ak4183 *tsc, struct ts_event *tc)
{
/* y- still on; turn on only y+ (and ADC) */
tc->y = ak4183_xfer(tsc, READ_Y);
/* turn y- off, x+ on, then leave in lowpower */
tc->x = ak4183_xfer(tsc, READ_X);
/* turn y+ off, x- on; we'll use formula #1 */
tc->z1 = ak4183_xfer(tsc, READ_Z1);
tc->z2 = ak4183_xfer(tsc, READ_Z2);
/** calcilate pressure resistance **/
tc->prs = 0;
/* range filtering */
if (tc->x == MAX_12BIT)
tc->x = 0;
/* compute touch pressure resistance using equation #1 */
#if 1
u32 rt = 0;
s32 rtt = 0;
//s32 x,y;
tc->x = ak4183_xfer(tsc, READ_X);//x
tc->y = ak4183_xfer(tsc, READ_Y);//y
//printk(KERN_INFO "AK4183: %5i;%5i;",
// tc->x,tc->y);
tc->z1 = ak4183_xfer(tsc,READ_Z1);//z1
tc->z2 = ak4183_xfer(tsc,READ_Z2);//z2
if (likely(tc->x && tc->z1)) {
//tc->prs = tc->z2 - tc->z1;
tc->prs = (tc->z2 / tc->z1 - 1);
tc->prs *= (tc->x/256);
tc->prs *= tsc->x_plate_ohms;
tc->prs /= tc->z1;
//tc->prs = (tc->prs + 2047) >> 12;
}else
tc->prs = 0;
#else
if(likely(tc->x && tc->z1)) {
//tc->prs = (tsc->x_plate_ohms * tc->x * (tc->z2 - tc->z1) ) / (4096 * tc->z1); // 12 <20><><EFBFBD>
tc->prs = tsc->x_plate_ohms;
tc->prs *= tc->x;
tc->prs /= 4096;
tc->prs *= ((4096/tc->z1) - 1);
tc->prs -= tsc->y_plate_ohms * (1 - (tc->y / 4096));
/* compute touch pressure resistance using equation #1 */
rt = tc->x*(tc->z2-tc->z1)/(tc->z1);
if (rt<6350){ // min toch
rtt=rt-5000;//for func ; 0-max touch
if (rt<5000){rt=5000;} // max
rt=(6350-rt)*3;//0xFFF max
if (rt>=0xFFF) {rt=0xFFE;}//max
// printk(KERN_INFO "AK4183: %5u;%5u;%5u;%5u;%5u;",
// tc->x,tc->y,tc->z1,tc->z2,rtt);
}else{
rt=0;//no touch
}
#endif
/*
Rtouch = (Rxplate) * (Xposition/4096) * [(Z2/Z1) <20> 1]
Rtouch = (Rxplate*Xposition/4096)*[(4096/Z1) <20> 1] <20> Ryplate*[1 <20> (Yposition/4096)]
*/
printk(KERN_INFO "ts: calc X = 0x%04x Y = 0x%04x Z1 = 0x%04x, Z2 = 0x%04x, PRS = 0x%04x\n", tc->x, tc->y, tc->z1, tc->z2, tc->prs);
/* Prepare for next touch reading - power down ADC, enable PENIRQ */
//ak4183_xfer(tsc, PWRDOWN);
}
//todo : need pwrdown
if (rt){//*200
tc->x=(u32)(((s32)(tc->x)*tmc_x10+rtt*tmc_ax_m_x0)/(tmc_x10+tmc_ax*rtt));
tc->y=(u32)(((s32)(tc->y)*tmc_y10+rtt*tmc_ay_m_y0)/(tmc_y10+tmc_ay*rtt));
}
return rt;
}
static void ak4183_send_up_event(struct ak4183 *tsc)
{
struct input_dev *input = tsc->input;
devdbg("ak4183: send_up_event\n");
dev_dbg(&tsc->client->dev, "UP\n");
input_report_key(input, BTN_TOUCH, 0);
input_report_abs(input, ABS_PRESSURE, 0);
@@ -232,8 +222,11 @@ static void ak4183_send_up_event(struct ak4183 *tsc)
static void ak4183_work(struct work_struct *work)
{
struct ak4183 *ts = container_of(to_delayed_work(work), struct ak4183, work);
struct ak4183 *ts =
container_of(to_delayed_work(work), struct ak4183, work);
struct ts_event tc;
u32 rt;
/*
* NOTE: We can't rely on the pressure to determine the pen down
* state, even though this controller has a pressure sensor.
@@ -242,52 +235,47 @@ static void ak4183_work(struct work_struct *work)
* expected value.
*
* The only safe way to check for the pen up condition is in the
* work function by reading the pen signal state (it's a GPIO
* work function by reading he pen signal state (it's a GPIO
* and IRQ). Unfortunately such callback is not always available,
* in that case we have rely on the pressure anyway.
*/
if (ts->get_pendown_state) {
if (unlikely(!ts->get_pendown_state())) {
devdbg("ak4183: pendown_state = UP\n");
ak4183_send_up_event(ts);
ts->pendown = false;
goto out;
}
devdbg("ak4183: pen is still down\n");
//dev_dbg(&ts->client->dev, "pen is still down\n");
}
ak4183_read_values(ts, &tc);
rt = ak4183_read_values(ts, &tc);
if (tc.prs > MAX_12BIT) {
if (rt > MAX_12BIT) {
/*
* Sample found inconsistent by debouncing or pressure is
* beyond the maximum. Don't report it to user space,
* repeat at least once more the measurement.
*/
devdbg("ak4183: ignored pressure %d\n", tc.prs);
dev_dbg(&ts->client->dev, "ignored pressure %d\n", rt);
goto out;
}
if (tc.prs) {
if (rt) {
struct input_dev *input = ts->input;
if (!ts->pendown) {
devdbg("ak4183: DOWN\n");
dev_dbg(&ts->client->dev, "DOWN\n");
input_report_key(input, BTN_TOUCH, 1);
ts->pendown = true;
}
devdbg("ak4183 x = 0x%4x,y = 0x%4x,rt = 0x%4x", tc.x, tc.y, rt);
input_report_abs(input, ABS_X, tc.x);
input_report_abs(input, ABS_Y, tc.y);
input_report_abs(input, ABS_PRESSURE, tc.prs);
input_report_abs(input, ABS_PRESSURE, rt);
input_sync(input);
} else if (!ts->get_pendown_state && ts->pendown) {
/*
* We don't have callback to check pendown state, so we
@@ -390,12 +378,9 @@ static int __devinit ak4183_probe(struct i2c_client *client,
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
// input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
input_set_abs_params(input_dev, ABS_X, abs_x[0], abs_x[1], abs_x[2], 0);
// input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
input_set_abs_params(input_dev, ABS_Y, abs_y[0], abs_y[1], abs_y[2], 0);
input_set_abs_params(input_dev, ABS_PRESSURE, abs_p[0], abs_p[1], abs_p[2], 0);
// input_set_abs_params(input_dev, ABS_PRESSURE, 0, MAX_12BIT, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, MAX_12BIT, 0, 0);
if (pdata->init_platform_hw)
pdata->init_platform_hw();

View File

@@ -37,15 +37,24 @@
#include <asm/io.h>
#include <asm/fb.h>
#define VIDEOMEMPAGE (1 << PAGE_SHIFT)
#define FB_WIDTH 480
#define FB_HEIGHT 800
#define VIDEOMEMSTART 0x0a000020 /* vram variable value from HaRET */
#define FB_NUMBER_OF_BUFFERS 2
#define FB_NUMBER_OF_BUFFERS 3
#define FB_BYTES_PER_PIXEL 2
#define VIDEOMEMSIZE FB_WIDTH * FB_HEIGHT * FB_BYTES_PER_PIXEL * FB_NUMBER_OF_BUFFERS
#define VIDEOMEMBUFSIZE FB_WIDTH * FB_HEIGHT * FB_BYTES_PER_PIXEL
#define VIDEOMEMSIZE VIDEOMEMBUFSIZE * FB_NUMBER_OF_BUFFERS + VIDEOMEMPAGE
/*
FB_WIDTH * FB_HEIGHT * FB_BYTES_PER_PIXEL= 0xBB800
*2 = 0x177000
*/
int mmap_flag = 0;
static void *videomemory;
static u_long videomemorysize = VIDEOMEMSIZE * FB_NUMBER_OF_BUFFERS;
module_param(videomemorysize, ulong, 0);
@@ -61,7 +70,7 @@ static struct fb_var_screeninfo g900fb_default __initdata = {
.xres = FB_WIDTH,
.yres = FB_HEIGHT,
.xres_virtual = FB_WIDTH,
.yres_virtual = FB_HEIGHT * FB_NUMBER_OF_BUFFERS,
.yres_virtual = FB_HEIGHT * FB_NUMBER_OF_BUFFERS+100,
.bits_per_pixel = 16,
.red = { 11, 5, 0 },
.green = { 5, 6, 0 },
@@ -100,92 +109,89 @@ static void g900fb_imageblit(struct fb_info *info, const struct fb_image *image)
static void g900fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
{
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* Метод ускорения для заполнения прямоугольника линиями пикселей */
/* похоже вообще не используеться */
cfb_fillrect(info,rect);
};
static void g900fb_copyarea(struct fb_info *info, const struct fb_copyarea *region)
{
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* Метод ускорения копирования одной прямоугольной области в другую */
/* похоже вообще не используеться */
cfb_copyarea(info,region);
};
static void g900fb_imageblit(struct fb_info *info, const struct fb_image *image)
{
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> !!! */
/* Метод ускорения рисования на экране картинки */
/* Без этого даже не отображаеться консоль !!! */
cfb_imageblit(info,image);
/*
printk("FB: g900fb_imageblit\n");
printk("FB: smem_start 0x%08x,screen_base 0x%08x\n",info->fix.smem_start, info->screen_base);
printk("FB: offset x:0x%08x, y:0x%08x\n",info->var.xoffset,info->var.yoffset);
printk("FB: xres x:0x%08x, y:0x%08x\n",info->var.xres, info->var.yres);
printk("FB: image dx:0x%08x, dy:0x%08x, w:0x%08x, h:0x%08x\n",
image->dx, image->dy,image->width, image->height);
//*/
};
/*
static int g900fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
{
//vma->vm_mm->mmap_base = 0x0a000020;
//vma->vm_start = 0x0a000020;
unsigned long off;
unsigned long start;
u32 len;
mmap_flag = 1;
off = vma->vm_pgoff << PAGE_SHIFT;
//printk("FB: +g900fb_mmap: 0x%08x\n",off);
/*
start = info->fix.smem_start;
len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len);
if (off >= len) {
//memory mapped io
off -= len;
if (info->var.accel_flags) {
mutex_unlock(&info->mm_lock);
return -EINVAL;
}
start = info->fix.mmio_start;
len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.mmio_len);
}
*/
#define fix_video_mem_page (VIDEOMEMBUFSIZE + VIDEOMEMPAGE - 0x20)
start = info->fix.smem_start + fix_video_mem_page;
len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len + VIDEOMEMPAGE);
start &= PAGE_MASK;
if ((vma->vm_end - vma->vm_start + off) > len)
{
//printk("FB: -g900fb_mmap: offset > len");
return -EINVAL;
}
off += start;
vma->vm_pgoff = off >> PAGE_SHIFT;
vma->vm_flags |= VM_IO | VM_RESERVED;
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
if (remap_pfn_range(vma, vma->vm_start, off >> PAGE_SHIFT,
//printk("FB: -g900fb_mmap: start = 0x%08x, len = 0x%08x, pgoff = 0x%08x, prot = 0x%08x, vm_start = 0x%08x, vm_end = 0x%08x\n", start, len, vma->vm_pgoff, vma->vm_page_prot, vma->vm_start, vma->vm_end);
/*
FB: fb->fb.screen_base=0xd5000020
FB: -g900fb_mmap: start = 0x0a0bc000, len = 0x00179000, pgoff = 0x0000a0bc, prot = 0x00000387, vm_start = 0x44ea4000, vm_end = 0x4501b000
*/
if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
vma->vm_end - vma->vm_start, vma->vm_page_prot))
return -EAGAIN;
//return 0;
printk("FB: +vma mmap_base: 0x%08x,vm_start: 0x%08x,vm_end: 0x%08x, vm_pgoff: 0x%08x\n",
vma->vm_mm->mmap_base,vma->vm_start,vma->vm_end,vma->vm_pgoff);
return 0;
};
*/
static struct fb_ops g900fb_ops = {
.fb_check_var = g900fb_check_var, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//.fb_set_par = g900fb_set_par, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
.fb_setcolreg = g900fb_setcolreg, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
.fb_pan_display = g900fb_pan_display, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
.fb_check_var = g900fb_check_var, /* Проверка параметров */
//.fb_set_par = g900fb_set_par, /* Программирование регистров контроллера */
.fb_setcolreg = g900fb_setcolreg, /* Установка карты цветов */
.fb_pan_display = g900fb_pan_display, /* переключение страниц буферов */
.fb_fillrect = g900fb_fillrect,
.fb_copyarea = g900fb_copyarea,
.fb_imageblit = g900fb_imageblit,
//.fb_ioctl = g900fb_ioctl, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ioctl */
//.fb_blank = g900fb_blank, /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//.fb_mmap = g900fb_mmap,
//.fb_ioctl = g900fb_ioctl, /* Зависимая от устройства ioctl */
//.fb_blank = g900fb_blank, /* Включение/выключение экрана */
.fb_mmap = g900fb_mmap,
};
@@ -275,25 +281,27 @@ static int g900fb_pan_display(struct fb_var_screeninfo *var,
{
struct fb_copyarea fbca;
/*
printk("FB: g900fb_pan_display\n");
printk("FB: smem_start 0x%08x,screen_base 0x%08x\n",info->fix.smem_start, info->screen_base);
printk("FB: xoffset 0x%08x,0x%08x\n",info->var.xoffset, var->xoffset);
printk("FB: yoffset 0x%08x,0x%08x\n",info->var.yoffset, var->yoffset);
*/
if(info->var.yoffset >=FB_HEIGHT)
{
/* TODO find hardware flip page*/
/* TODO find hardware flip page or copyarea*/
memset(&fbca, 0, sizeof(fbca));
if(info->var.yoffset == 0 && mmap_flag > 0){
fbca.sx=info->var.xoffset + 0x30;
fbca.sy=info->var.yoffset + FB_HEIGHT + 0x03;
fbca.dx=info->var.xoffset;
fbca.dy=info->var.yoffset;
}
else if(info->var.yoffset >= FB_HEIGHT)
{
fbca.sx=info->var.xoffset + 0x30;
fbca.sy=info->var.yoffset + FB_HEIGHT + 0x03;
fbca.dx=info->var.xoffset;
fbca.dy=info->var.yoffset - FB_HEIGHT;
}
fbca.width=FB_WIDTH;
fbca.height=FB_HEIGHT;
fbca.sx=info->var.xoffset;
fbca.sy=info->var.yoffset;
cfb_copyarea(info,&fbca);
}
//printk("FB: g900fb_pan_display x=%d,y=%d\n",info->var.xoffset,info->var.yoffset);
return 0;
}
@@ -334,9 +342,9 @@ static int __init g900fb_probe(struct platform_device *dev)
platform_set_drvdata(dev, &fb->fb);
printk(KERN_INFO"fb%d: g900 frame buffer device, using %ldK of video memory\n",
printk(KERN_INFO "fb%d: g900 frame buffer device, using %ldK of video memory\n",
fb->fb.node, videomemorysize >> 10);
printk(KERN_INFO"FB: fb->fb.screen_base=0x%08x\n", fb->fb.screen_base);
//printk(KERN_INFO "FB: fb->fb.screen_base=0x%08x\n", fb->fb.screen_base);
return 0;

36
ramfs-android/bin/MAKEDEVS Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/sh
mkdir -m 0777 /dev/block
mknod -m 0666 /dev/block/loop0 b 7 0
mknod -m 0666 /dev/block/loop1 b 7 1
mknod -m 0666 /dev/block/loop2 b 7 2
mknod -m 0666 /dev/block/mmcblk0 b 179 0
mknod -m 0666 /dev/block/mmcblk0p1 b 179 1
mknod -m 0666 /dev/block/mmcblk0p2 b 179 2
mknod -m 0666 /dev/block/mmcblk0p3 b 179 3
mknod -m 0666 /dev/block/mmcblk0p4 b 179 4
mknod -m 0666 /dev/block/mmcblk0p5 b 179 5
mkdir -m 0777 /dev/input
mknod -m 0644 /dev/input/event0 c 13 64
mknod -m 0644 /dev/input/event1 c 13 65
mknod -m 0644 /dev/input/event2 c 13 66
mknod -m 0644 /dev/input/event3 c 13 67
mknod -m 0666 /dev/null c 1 3
mknod -m 0444 /dev/zero c 1 5
#mknod -m 0666 /dev/console c 5 1
mknod -m 0666 /dev/tty c 5 0
mknod -m 0666 /dev/tty0 c 4 0
mknod -m 0666 /dev/tty1 c 4 1
mknod -m 0666 /dev/tty2 c 4 2
mknod -m 0666 /dev/tty3 c 4 3
mknod -m 0666 /dev/tty4 c 4 4
mknod -m 0644 /dev/ppp0 c 108 0
mknod -m 0644 /dev/smd0 c 253 0
mknod -m 0644 /dev/smd1 c 253 1
mknod -m 0644 /dev/initrd b 1 250
mkdir -m 0777 /dev/graphics
mknod -m 0666 /dev/graphics/fb0 c 29 0

View File

@@ -43,7 +43,7 @@ sleep 1
mount -t proc proc /proc
mount -t sysfs sys /sys
#exec /bin/sh
/bin/MAKEDEVS
fail() {
@@ -108,7 +108,15 @@ if [ -e /sdcard/ANDROID/userscript.sh ] ; then
/data/userscript.sh
fi
#ls /sys/class/timed_output/
export LD_PRELOAD=/system/lib/libts.so:/system/lib/ts/pthres.so
if [ -f /sdcard/ts ] ; then
echo "EXECUTE CALIBRATE TOUCHSCREEN!!!"
/bin/mkdir -m 0777 /data/system/tslib
/system/bin/ts_calibrate
/bin/rm /sdcard/ts
fi
#exec /bin/sh
exec /init_1

View File

@@ -6,7 +6,7 @@ sysclktz 0
loglevel 3
# setup the global environment
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
export PATH /sbin:/system/sbin:/system/bin:/system/xbin:/bin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system

Binary file not shown.