Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Only in zte/arch/arm/configs: msm7627_blade_P330_defconfig
- Only in zte/arch/arm/configs: msm7627_blade_P729B_defconfig
- Only in zte/arch/arm/configs: msm7627_joe_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_P726CU_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_P726C_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_P726G_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_P726N_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_P726US_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_P726VV_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_R750_defconfig
- Only in zte/arch/arm/configs: msm7627_mooncake_defconfig
- Only in zte/arch/arm/configs: msm7627_r750_defconfig
- Only in zte/arch/arm/configs: msm7627_raise_defconfig
- Only in zte/arch/arm/configs: msm7627_smooth_P728H_defconfig
- Only in zte/arch/arm/kernel: vmlinux.lds
- diff -urB -x .git msm/arch/arm/mach-msm/Kconfig zte/arch/arm/mach-msm/Kconfig
- --- msm/arch/arm/mach-msm/Kconfig Mon Nov 1 14:42:21 2010
- +++ zte/arch/arm/mach-msm/Kconfig Wed Oct 13 18:07:20 2010
- @@ -108,6 +108,111 @@
- bool "MSM7x27 SURF"
- help
- Support for the Qualcomm MSM7x27 SURF eval board.
- +
- +# ZTE_PLATFORM
- +config ZTE_PLATFORM
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default y
- + bool "ZTE Platform."
- + help
- + Support for the ZTE Platform.
- +
- +# ZTE mooncake
- +config MACH_MOONCAKE
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE mooncake board."
- + help
- + Support for the ZTE mooncake board.
- +
- +# ZTE blade
- +config MACH_BLADE
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE blade board."
- + help
- + Support for the ZTE blade board.
- +
- +# ZTE smooth
- +config MACH_SMOOTH
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE smooth board."
- + help
- + Support for the ZTE smooth board.
- +
- +# ZTE raise
- +config MACH_RAISE
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE raise board."
- + help
- + Support for the ZTE raise board.
- +
- +# ZTE joe
- +config MACH_JOE
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE joe board."
- + help
- + Support for the ZTE joe board.
- +
- +# ZTE R750
- +config MACH_R750
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE R750 board."
- + help
- + Support for the ZTE R750 board.
- +
- +# ZTE ZTE_MULTIMODE
- +config ZTE_MULTIMODE
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE MULTIMODE."
- + help
- + Support for ZTE MULTIMODE.
- +
- +# ZTE ZTE_CG_MULTIMODE
- +config ZTE_CG_MULTIMODE
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE CG_MULTIMODE."
- + help
- + Support for ZTE CG_MULTIMODE.
- +
- +# ZTE ZTE_CDMA_NETWORK_TEST
- +config ZTE_CDMA_NETWORK_TEST
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE CDMA_NETWORK_TEST."
- + help
- + Support for ZTE CDMA_NETWORK_TEST.
- +
- +# ZTE ZTE_TELECOM_TEST
- +config ZTE_TELECOM_TEST
- + depends on ARCH_MSM
- + depends on !MSM_STACKED_MEMORY
- + default n
- + bool "ZTE TELECOM_TEST."
- + help
- + Support for ZTE TELECOM_TEST.
- +
- +# ZTE_FTM_FLAG_SUPPORT
- +config ZTE_FTM_FLAG_SUPPORT
- + depends on ZTE_PLATFORM
- + default y
- + bool "enable ZTE handset FTM mode detect."
- config MACH_MSM7X27_FFA
- depends on ARCH_MSM7X27
- @@ -235,7 +340,7 @@
- config PHYS_OFFSET
- hex
- - default "0x00200000" if !MSM_STACKED_MEMORY
- + default "0x02A00000" if !MSM_STACKED_MEMORY
- default "0x00000000" if ARCH_QSD8X50 && MSM_SOC_REV_A
- default "0x20000000" if ARCH_QSD8X50
- default "0x10000000"
- diff -urB -x .git msm/arch/arm/mach-msm/Makefile zte/arch/arm/mach-msm/Makefile
- --- msm/arch/arm/mach-msm/Makefile Mon Nov 1 14:42:21 2010
- +++ zte/arch/arm/mach-msm/Makefile Fri Oct 15 17:30:18 2010
- @@ -91,7 +92,20 @@
- obj-$(CONFIG_TROUT_H2W) += board-trout-h2w.o
- obj-$(CONFIG_TROUT_BATTCHG) += htc_battery.o
- obj-$(CONFIG_TROUT_PWRSINK) += htc_pwrsink.o
- -obj-$(CONFIG_ARCH_MSM7X27) += board-msm7x27.o
- +#obj-$(CONFIG_ARCH_MSM7X27) += board-msm7x27.o
- +
- +obj-$(CONFIG_MACH_MOONCAKE) += board-mooncake.o board-mooncake-keypad.o msm_vibrator.o
- +
- +obj-$(CONFIG_MACH_R750) += board-r750.o board-r750-keypad.o msm_vibrator.o
- +
- +obj-$(CONFIG_MACH_BLADE) += board-zte-blade.o board-zte-blade-keypad.o msm_vibrator.o
- +
- +obj-$(CONFIG_MACH_SMOOTH) += board-zte-smooth.o board-zte-smooth-keypad.o msm_vibrator.o
- +
- +obj-$(CONFIG_MACH_RAISE) += board-raise.o board-raise-keypad.o msm_vibrator.o
- +
- +obj-$(CONFIG_MACH_JOE) += board-joe.o board-joe-keypad.o msm_vibrator.o
- +
- obj-$(CONFIG_ARCH_MSM7X30) += board-msm7x30.o clock-7x30.o
- obj-$(CONFIG_ARCH_MSM7X25) += board-msm7x27.o
- diff -urB -x .git msm/arch/arm/mach-msm/Makefile.boot zte/arch/arm/mach-msm/Makefile.boot
- --- msm/arch/arm/mach-msm/Makefile.boot Mon Nov 1 13:46:21 2010
- +++ zte/arch/arm/mach-msm/Makefile.boot Wed Oct 13 18:07:20 2010
- @@ -1,31 +1,31 @@
- # MSM7x01A
- - zreladdr-$(CONFIG_ARCH_MSM7X01A) := 0x10008000
- -params_phys-$(CONFIG_ARCH_MSM7X01A) := 0x10000100
- -initrd_phys-$(CONFIG_ARCH_MSM7X01A) := 0x10800000
- +# zreladdr-$(CONFIG_ARCH_MSM7X01A) := 0x10008000
- +#params_phys-$(CONFIG_ARCH_MSM7X01A) := 0x10000100
- +#initrd_phys-$(CONFIG_ARCH_MSM7X01A) := 0x10800000
- # MSM7x25
- - zreladdr-$(CONFIG_ARCH_MSM7X25) := 0x00208000
- -params_phys-$(CONFIG_ARCH_MSM7X25) := 0x00200100
- -initrd_phys-$(CONFIG_ARCH_MSM7X25) := 0x0A000000
- +# zreladdr-$(CONFIG_ARCH_MSM7X25) := 0x00208000
- +#params_phys-$(CONFIG_ARCH_MSM7X25) := 0x00200100
- +#initrd_phys-$(CONFIG_ARCH_MSM7X25) := 0x0A000000
- # MSM7x27
- - zreladdr-$(CONFIG_ARCH_MSM7X27) := 0x00208000
- -params_phys-$(CONFIG_ARCH_MSM7X27) := 0x00200100
- + zreladdr-$(CONFIG_ARCH_MSM7X27) := 0x02A08000
- +params_phys-$(CONFIG_ARCH_MSM7X27) := 0x02A00100
- initrd_phys-$(CONFIG_ARCH_MSM7X27) := 0x0A000000
- # MSM7x30
- - zreladdr-$(CONFIG_ARCH_MSM7X30) := 0x00208000
- -params_phys-$(CONFIG_ARCH_MSM7X30) := 0x00200100
- -initrd_phys-$(CONFIG_ARCH_MSM7X30) := 0x01200000
- +# zreladdr-$(CONFIG_ARCH_MSM7X30) := 0x00208000
- +#params_phys-$(CONFIG_ARCH_MSM7X30) := 0x00200100
- +#initrd_phys-$(CONFIG_ARCH_MSM7X30) := 0x01200000
- -ifeq ($(CONFIG_MSM_SOC_REV_A),y)
- +#ifeq ($(CONFIG_MSM_SOC_REV_A),y)
- # QSD8X50A
- - zreladdr-$(CONFIG_ARCH_QSD8X50) := 0x00008000
- -params_phys-$(CONFIG_ARCH_QSD8X50) := 0x00000100
- -initrd_phys-$(CONFIG_ARCH_QSD8X50) := 0x04000000
- -else
- +# zreladdr-$(CONFIG_ARCH_QSD8X50) := 0x00008000
- +#params_phys-$(CONFIG_ARCH_QSD8X50) := 0x00000100
- +#initrd_phys-$(CONFIG_ARCH_QSD8X50) := 0x04000000
- +#else
- # QSD8x50
- - zreladdr-$(CONFIG_ARCH_QSD8X50) := 0x20008000
- -params_phys-$(CONFIG_ARCH_QSD8X50) := 0x20000100
- -initrd_phys-$(CONFIG_ARCH_QSD8X50) := 0x24000000
- -endif
- +# zreladdr-$(CONFIG_ARCH_QSD8X50) := 0x20008000
- +#params_phys-$(CONFIG_ARCH_QSD8X50) := 0x20000100
- +#initrd_phys-$(CONFIG_ARCH_QSD8X50) := 0x24000000
- +#endif
- Only in zte/arch/arm/mach-msm: board-joe-keypad.c
- Only in zte/arch/arm/mach-msm: board-joe.c
- Only in zte/arch/arm/mach-msm: board-mooncake-keypad.c
- Only in zte/arch/arm/mach-msm: board-mooncake.c
- Only in zte/arch/arm/mach-msm: board-r750-keypad.c
- Only in zte/arch/arm/mach-msm: board-r750.c
- Only in zte/arch/arm/mach-msm: board-zte-blade-keypad.c
- Only in zte/arch/arm/mach-msm: board-zte-blade.c
- Only in zte/arch/arm/mach-msm: board-zte-blade.c.bak
- Only in zte/arch/arm/mach-msm: debug.c
- Only in zte/arch/arm/mach-msm/include/mach: avago_ofn.h
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/camera.h zte/arch/arm/mach-msm/include/mach/camera.h
- --- msm/arch/arm/mach-msm/include/mach/camera.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/camera.h Mon Oct 18 11:03:32 2010
- @@ -29,9 +30,18 @@
- #include <mach/board.h>
- #include <media/msm_camera.h>
- +
- +#undef CCRT
- +#undef CINF
- +#undef CDBG
- #ifdef CONFIG_MSM_CAMERA_DEBUG
- -#define CDBG(fmt, args...) printk(KERN_INFO "msm_camera: " fmt, ##args)
- +#define CPREFIX "[jia@msm_camera]"
- +#define CCRT(fmt, args...) printk(KERN_CRIT CPREFIX": " fmt, ##args)
- +#define CINF(fmt, args...) printk(KERN_CRIT CPREFIX": " fmt, ##args)
- +#define CDBG(fmt, args...) printk(KERN_CRIT CPREFIX": " fmt, ##args)
- #else
- +#define CCRT(fmt, args...) do { } while (0)
- +#define CINF(fmt, args...) do { } while (0)
- #define CDBG(fmt, args...) do { } while (0)
- #endif
- @@ -260,6 +270,12 @@
- int (*sensor_probe)(const struct msm_camera_sensor_info *,
- struct msm_sensor_ctrl *));
- +
- +#if defined(CONFIG_SENSOR_ADAPTER)
- +int msm_camera_dev_start(struct platform_device *dev,
- + int (*sensor_dev_probe)(const struct msm_camera_sensor_info *));
- +#endif
- +
- enum msm_camio_clk_type {
- CAMIO_VFE_MDC_CLK,
- CAMIO_MDC_CLK,
- @@ -309,6 +325,15 @@
- enum msm_s_setting {
- S_RES_PREVIEW,
- S_RES_CAPTURE
- +};
- +
- +
- +enum msm_camera_pwr_mode_t {
- + MSM_CAMERA_PWRUP_MODE = 0,
- + MSM_CAMERA_STANDBY_MODE,
- + MSM_CAMERA_NORMAL_MODE,
- + MSM_CAMERA_PWRDWN_MODE,
- + MSM_CAMERA_PWR_MODE_MAX
- };
- int msm_camio_enable(struct platform_device *dev);
- Only in zte/arch/arm/mach-msm/include/mach: fm_si4708.h
- Only in zte/arch/arm/mach-msm/include/mach: jogball_key.h
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/memory.h zte/arch/arm/mach-msm/include/mach/memory.h
- --- msm/arch/arm/mach-msm/include/mach/memory.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/memory.h Mon Oct 18 11:04:40 2010
- @@ -39,7 +39,7 @@
- #include <asm/mach-types.h>
- #define arch_barrier_extra() do \
- - { if (machine_is_msm7x27_surf() || machine_is_msm7x27_ffa()) \
- + { \
- write_to_strongly_ordered_memory(); \
- } while (0)
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/msm_adsp.h zte/arch/arm/mach-msm/include/mach/msm_adsp.h
- --- msm/arch/arm/mach-msm/include/mach/msm_adsp.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/msm_adsp.h Mon Oct 18 11:04:54 2010
- @@ -41,6 +42,8 @@
- int msm_adsp_disable(struct msm_adsp_module *module);
- int adsp_set_clkrate(struct msm_adsp_module *module, unsigned long clk_rate);
- int msm_adsp_disable_event_rsp(struct msm_adsp_module *module);
- +void resume_prevent_suspend(void);
- +void suspend_allow_suspend(void);
- /* Write is safe to call from interrupt context.
- */
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/msm_hsusb.h zte/arch/arm/mach-msm/include/mach/msm_hsusb.h
- --- msm/arch/arm/mach-msm/include/mach/msm_hsusb.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/msm_hsusb.h Wed Oct 13 18:07:14 2010
- @@ -52,6 +52,7 @@
- #ifndef CONFIG_USB_ANDROID
- /* platform device data for msm_hsusb driver */
- struct usb_composition {
- + __u16 vendor_id;
- __u16 product_id;
- unsigned long functions;
- };
- @@ -97,6 +98,7 @@
- int vreg5v_required;
- u32 swfi_latency;
- + int zte_pid;//hemulu
- };
- struct msm_otg_platform_data {
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/msm_iomap-7xxx.h zte/arch/arm/mach-msm/include/mach/msm_iomap-7xxx.h
- --- msm/arch/arm/mach-msm/include/mach/msm_iomap-7xxx.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/msm_iomap-7xxx.h Wed Oct 13 18:07:14 2010
- @@ -99,4 +99,7 @@
- #define MSM_AD5_PHYS 0xAC000000
- #define MSM_AD5_SIZE (SZ_1M*13)
- +#define MSM_SMEM_RAM_PHYS 0x00200000
- +#define MSM_SMEM_RAM_SIZE SZ_1M
- +
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/msm_serial_hs.h zte/arch/arm/mach-msm/include/mach/msm_serial_hs.h
- --- msm/arch/arm/mach-msm/include/mach/msm_serial_hs.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/msm_serial_hs.h Thu Oct 14 14:51:26 2010
- @@ -26,6 +26,11 @@
- char rx_to_inject;
- };
- +#ifdef CONFIG_MODEMCTL
- +#define MODEMCTL_UARTDM1_UNINIT 2
- +unsigned int msm_hs_dm1_tx_empty(void);
- +#endif
- +
- unsigned int msm_hs_tx_empty(struct uart_port *uport);
- void msm_hs_request_clock_off(struct uart_port *uport);
- void msm_hs_request_clock_on(struct uart_port *uport);
- diff -urB -x .git msm/arch/arm/mach-msm/include/mach/rpc_hsusb.h zte/arch/arm/mach-msm/include/mach/rpc_hsusb.h
- --- msm/arch/arm/mach-msm/include/mach/rpc_hsusb.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/include/mach/rpc_hsusb.h Mon Oct 18 11:05:20 2010
- @@ -32,6 +33,7 @@
- int msm_hsusb_send_productID(uint32_t product_id);
- int msm_hsusb_send_serial_number(char *serial_number);
- int msm_hsusb_is_serial_num_null(uint32_t val);
- +int msm_hsusb_get_set_usb_conf_nv_value(uint32_t nv_item,uint32_t value,uint32_t is_write);//ZTE-USB-HML-02
- int msm_hsusb_reset_rework_installed(void);
- int msm_hsusb_enable_pmic_ulpidata0(void);
- int msm_hsusb_disable_pmic_ulpidata0(void);
- diff -urB -x .git msm/arch/arm/mach-msm/io.c zte/arch/arm/mach-msm/io.c
- --- msm/arch/arm/mach-msm/io.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/io.c Mon Oct 18 11:31:16 2010
- @@ -46,10 +47,14 @@
- int i;
- BUG_ON(!size);
- - for (i = 0; i < size; i++)
- +
- + for (i = 0; i < size; i++) {
- if (io_desc[i].virtual == (unsigned long)MSM_SHARED_RAM_BASE)
- io_desc[i].pfn = __phys_to_pfn(msm_shared_ram_phys);
- + }
- +
- +
- iotable_init(io_desc, size);
- }
- @@ -81,6 +86,20 @@
- .length = MSM_SHARED_RAM_SIZE,
- .type = MT_DEVICE,
- },
- +
- +#if 0
- + {
- + .virtual = (unsigned long) MSM_TRACE_LOG_BASE,
- + .length = MSM_TRACE_LOG_SIZE,
- + .type = MT_DEVICE,
- + },
- +
- + {
- + .virtual = (unsigned long) MSM_F3_LOG_BASE,
- + .length = MSM_F3_LOG_SIZE,
- + .type = MT_DEVICE,
- + },
- +#endif
- };
- void __init msm_map_common_io(void)
- Only in zte/arch/arm/mach-msm: msm_usb_config.h
- diff -urB -x .git msm/arch/arm/mach-msm/msm_vibrator.c zte/arch/arm/mach-msm/msm_vibrator.c
- --- msm/arch/arm/mach-msm/msm_vibrator.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/msm_vibrator.c Mon Oct 18 11:32:12 2010
- @@ -22,19 +23,27 @@
- #include <mach/msm_rpcrouter.h>
- -#define PM_LIBPROG 0x30000061
- +#define PM_LIBPROG 0x30000061
- +#if 1
- +#define PM_LIBVERS 0x10001
- +#else
- #if (CONFIG_MSM_AMSS_VERSION == 6220) || (CONFIG_MSM_AMSS_VERSION == 6225)
- -#define PM_LIBVERS 0xfb837d0b
- +#define PM_LIBVERS 0xfb837d0b
- #else
- -#define PM_LIBVERS 0x10001
- +#define PM_LIBVERS MSM_RPC_VERS(1,1)
- +#endif
- #endif
- -#define HTC_PROCEDURE_SET_VIB_ON_OFF 21
- +#define HTC_PROCEDURE_SET_VIB_ON_OFF 22
- #define PMIC_VIBRATOR_LEVEL (3000)
- -static struct work_struct work_vibrator_on;
- -static struct work_struct work_vibrator_off;
- +
- +
- +
- +static struct work_struct vibrator_work;
- static struct hrtimer vibe_timer;
- +static spinlock_t vibe_lock;
- +static int vibe_state;
- static void set_pmic_vibrator(int on)
- {
- @@ -44,6 +53,10 @@
- uint32_t data;
- } req;
- +#ifdef STONE_DEBUG
- + printk("\nstone vib01:0x%x,0x%x\n",on,vib_endpoint);
- +#endif
- +
- if (!vib_endpoint) {
- vib_endpoint = msm_rpc_connect(PM_LIBPROG, PM_LIBVERS, 0);
- if (IS_ERR(vib_endpoint)) {
- @@ -63,41 +75,34 @@
- sizeof(req), 5 * HZ);
- }
- -static void pmic_vibrator_on(struct work_struct *work)
- -{
- - set_pmic_vibrator(1);
- -}
- -
- -static void pmic_vibrator_off(struct work_struct *work)
- +static void update_vibrator(struct work_struct *work)
- {
- - set_pmic_vibrator(0);
- -}
- -
- -static void timed_vibrator_on(struct timed_output_dev *sdev)
- -{
- - schedule_work(&work_vibrator_on);
- -}
- -
- -static void timed_vibrator_off(struct timed_output_dev *sdev)
- -{
- - schedule_work(&work_vibrator_off);
- + set_pmic_vibrator(vibe_state);
- }
- static void vibrator_enable(struct timed_output_dev *dev, int value)
- {
- + unsigned long flags;
- +
- + spin_lock_irqsave(&vibe_lock, flags);
- hrtimer_cancel(&vibe_timer);
- +#ifdef STONE_DEBUG
- + printk("\nstone vib02:0x%x,0x%x\n",dev,value);
- +#endif
- +
- if (value == 0)
- - timed_vibrator_off(dev);
- + vibe_state = 0;
- else {
- - value = (value > 15000 ? 15000 : value);
- -
- - timed_vibrator_on(dev);
- -
- + value = (value > 1000 ? 1000 : value);
- + vibe_state = 1;
- hrtimer_start(&vibe_timer,
- - ktime_set(value / 1000, (value % 1000) * 1000000),
- - HRTIMER_MODE_REL);
- + ktime_set(value / 1000, (value % 1000) * 1000000),
- + HRTIMER_MODE_REL);
- }
- + spin_unlock_irqrestore(&vibe_lock, flags);
- +
- + schedule_work(&vibrator_work);
- }
- static int vibrator_get_time(struct timed_output_dev *dev)
- @@ -111,7 +116,8 @@
- static enum hrtimer_restart vibrator_timer_func(struct hrtimer *timer)
- {
- - timed_vibrator_off(NULL);
- + vibe_state = 0;
- + schedule_work(&vibrator_work);
- return HRTIMER_NORESTART;
- }
- @@ -123,9 +129,13 @@
- void __init msm_init_pmic_vibrator(void)
- {
- - INIT_WORK(&work_vibrator_on, pmic_vibrator_on);
- - INIT_WORK(&work_vibrator_off, pmic_vibrator_off);
- + INIT_WORK(&vibrator_work, update_vibrator);
- +
- + printk("\nstone_20100302 vib00:**************************************\n");
- +
- + spin_lock_init(&vibe_lock);
- + vibe_state = 0;
- hrtimer_init(&vibe_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
- vibe_timer.function = vibrator_timer_func;
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/adsp.c zte/arch/arm/mach-msm/qdsp5/adsp.c
- --- msm/arch/arm/mach-msm/qdsp5/adsp.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/adsp.c Mon Oct 18 11:06:28 2010
- @@ -36,14 +38,33 @@
- #include <linux/wakelock.h>
- static struct wake_lock adsp_wake_lock;
- +
- static inline void prevent_suspend(void)
- {
- + if (!wake_lock_active(&adsp_wake_lock))
- + {
- wake_lock(&adsp_wake_lock);
- }
- +}
- static inline void allow_suspend(void)
- {
- + if (wake_lock_active(&adsp_wake_lock))
- + {
- wake_unlock(&adsp_wake_lock);
- }
- +}
- +
- +void resume_prevent_suspend(void)
- +{
- + prevent_suspend();
- + MM_INFO("patch:resume_prevent_suspend\n");
- +}
- +void suspend_allow_suspend(void)
- +{
- + allow_suspend();
- + MM_INFO("patch:suspend_allow_suspend\n");
- +}
- +
- #include <linux/io.h>
- #include <mach/msm_iomap.h>
- @@ -427,8 +448,9 @@
- while (((ctrl_word = readl(info->write_ctrl)) &
- ADSP_RTOS_WRITE_CTRL_WORD_READY_M) !=
- ADSP_RTOS_WRITE_CTRL_WORD_READY_V) {
- - if (cnt > 50) {
- + if (cnt > (50 * 4)) {
- MM_ERR("timeout waiting for DSP write ready\n");
- + MM_ERR("write:write_ctrl = %#x\n", readl(info->write_ctrl));
- ret_status = -EIO;
- goto fail;
- }
- @@ -464,8 +486,9 @@
- while ((readl(info->write_ctrl) &
- ADSP_RTOS_WRITE_CTRL_WORD_MUTEX_M) ==
- ADSP_RTOS_WRITE_CTRL_WORD_MUTEX_NAVAIL_V) {
- - if (cnt > 2500) {
- + if (cnt > (2500 * 4)) {
- MM_ERR("timeout waiting for adsp ack\n");
- + MM_ERR("ack:write_ctrl = %#x\n", readl(info->write_ctrl));
- ret_status = -EIO;
- goto fail;
- }
- @@ -985,7 +1008,7 @@
- MM_INFO("enable '%s'state[%d] id[%d]\n",
- module->name, module->state, module->id);
- -
- + MM_INFO("adsp_open_count=%d\n", adsp_open_count);
- mutex_lock(&module->lock);
- switch (module->state) {
- case ADSP_STATE_DISABLED:
- @@ -995,9 +1018,16 @@
- break;
- module->state = ADSP_STATE_ENABLING;
- mutex_unlock(&module->lock);
- +#if 0
- +
- rc = wait_event_timeout(module->state_wait,
- module->state != ADSP_STATE_ENABLING,
- 1 * HZ);
- +#else
- + rc = wait_event_timeout(module->state_wait,
- + module->state != ADSP_STATE_ENABLING,
- + 5 * HZ);
- +#endif
- mutex_lock(&module->lock);
- if (module->state == ADSP_STATE_ENABLED) {
- rc = 0;
- @@ -1049,12 +1079,17 @@
- {
- int rc = 0;
- + MM_INFO("disable_locked:'%s'state[%d]:id[%d]:adsp_open_count=%d\n",
- + module->name, module->state, module->id, adsp_open_count);
- +
- switch (module->state) {
- case ADSP_STATE_DISABLED:
- MM_DBG("module '%s' already disabled\n", module->name);
- + MM_INFO("module '%s' already disabled\n", module->name);
- break;
- case ADSP_STATE_ENABLING:
- case ADSP_STATE_ENABLED:
- + MM_INFO("module'%s' to disabled\n", module->name);
- rc = rpc_adsp_rtos_app_to_modem(RPC_ADSP_RTOS_CMD_DISABLE,
- module->id, module);
- module->state = ADSP_STATE_DISABLED;
- @@ -1067,6 +1102,7 @@
- MM_INFO("disable interrupt\n");
- }
- mutex_unlock(&adsp_open_lock);
- + MM_INFO("adsp_open_count=%d\n", adsp_open_count);
- }
- return rc;
- }
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_aac.c zte/arch/arm/mach-msm/qdsp5/audio_aac.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_aac.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_aac.c Fri Oct 15 15:35:40 2010
- @@ -1482,6 +1484,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audaac_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audaac_resume(struct early_suspend *h)
- @@ -1492,7 +1495,9 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audaac_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- +
- #endif
- #ifdef CONFIG_DEBUG_FS
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_amrnb.c zte/arch/arm/mach-msm/qdsp5/audio_amrnb.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_amrnb.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_amrnb.c Fri Oct 15 15:35:20 2010
- @@ -1280,6 +1282,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audamrnb_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audamrnb_resume(struct early_suspend *h)
- @@ -1290,7 +1293,9 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audamrnb_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- +
- #endif
- #ifdef CONFIG_DEBUG_FS
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_amrwb.c zte/arch/arm/mach-msm/qdsp5/audio_amrwb.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_amrwb.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_amrwb.c Fri Oct 15 15:41:04 2010
- @@ -1361,6 +1361,7 @@
- pr_debug("%s()\n", __func__);
- audamrwb_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audamrwb_resume(struct early_suspend *h)
- @@ -1371,6 +1372,7 @@
- pr_debug("%s()\n", __func__);
- audamrwb_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_evrc.c zte/arch/arm/mach-msm/qdsp5/audio_evrc.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_evrc.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_evrc.c Fri Oct 15 15:41:26 2010
- @@ -1272,6 +1273,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audevrc_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audevrc_resume(struct early_suspend *h)
- @@ -1282,6 +1284,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audevrc_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_mp3.c zte/arch/arm/mach-msm/qdsp5/audio_mp3.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_mp3.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_mp3.c Fri Oct 15 15:42:14 2010
- @@ -1963,6 +1963,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audmp3_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audmp3_resume(struct early_suspend *h)
- @@ -1973,6 +1974,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audmp3_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_pcm.c zte/arch/arm/mach-msm/qdsp5/audio_pcm.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_pcm.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_pcm.c Fri Oct 15 15:42:32 2010
- @@ -1366,6 +1366,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audpcm_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audpcm_resume(struct early_suspend *h)
- @@ -1376,6 +1377,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audpcm_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_qcelp.c zte/arch/arm/mach-msm/qdsp5/audio_qcelp.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_qcelp.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_qcelp.c Fri Oct 15 15:43:02 2010
- @@ -1274,6 +1274,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audqcelp_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audqcelp_resume(struct early_suspend *h)
- @@ -1284,6 +1285,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audqcelp_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_wma.c zte/arch/arm/mach-msm/qdsp5/audio_wma.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_wma.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_wma.c Fri Oct 15 15:43:20 2010
- @@ -1417,6 +1418,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audwma_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audwma_resume(struct early_suspend *h)
- @@ -1427,6 +1429,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audwma_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audio_wmapro.c zte/arch/arm/mach-msm/qdsp5/audio_wmapro.c
- --- msm/arch/arm/mach-msm/qdsp5/audio_wmapro.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audio_wmapro.c Fri Oct 15 15:43:44 2010
- @@ -1414,6 +1415,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audwmapro_post_event(ctl->audio, AUDIO_EVENT_SUSPEND, payload);
- + suspend_allow_suspend();
- }
- static void audwmapro_resume(struct early_suspend *h)
- @@ -1424,6 +1426,7 @@
- MM_DBG("\n"); /* Macro prints the file name and function */
- audwmapro_post_event(ctl->audio, AUDIO_EVENT_RESUME, payload);
- + resume_prevent_suspend();
- }
- #endif
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audmgr.c zte/arch/arm/mach-msm/qdsp5/audmgr.c
- --- msm/arch/arm/mach-msm/qdsp5/audmgr.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audmgr.c Fri Oct 15 15:44:06 2010
- @@ -28,6 +28,9 @@
- #include "audmgr.h"
- +#include <linux/delay.h>
- +
- +
- #define STATE_CLOSED 0
- #define STATE_DISABLED 1
- #define STATE_ENABLING 2
- @@ -270,6 +273,9 @@
- amg->ept = NULL;
- goto done;
- }
- +
- + msleep(23);
- +
- }
- /* Initialize session parameters */
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/audmgr.h zte/arch/arm/mach-msm/qdsp5/audmgr.h
- --- msm/arch/arm/mach-msm/qdsp5/audmgr.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/audmgr.h Fri Oct 15 15:44:28 2010
- @@ -203,8 +204,9 @@
- typedef void (*audpp_event_func)(void *private, unsigned id, uint16_t *msg);
- typedef void (*audrec_event_func)(void *private, unsigned id, uint16_t *msg);
- +
- /* worst case delay of 100ms for response */
- -#define MSM_AUD_DECODER_WAIT_MS 200
- +#define MSM_AUD_DECODER_WAIT_MS 500
- #define MSM_AUD_MODE_TUNNEL 0x00000100
- #define MSM_AUD_MODE_NONTUNNEL 0x00000200
- #define MSM_AUD_DECODER_MASK 0x0000FFFF
- diff -urB -x .git msm/arch/arm/mach-msm/qdsp5/snd.c zte/arch/arm/mach-msm/qdsp5/snd.c
- --- msm/arch/arm/mach-msm/qdsp5/snd.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/qdsp5/snd.c Fri Oct 15 15:46:14 2010
- @@ -30,11 +32,15 @@
- #include <mach/board.h>
- #include <mach/msm_rpcrouter.h>
- +#include <linux/switch.h>
- +
- struct snd_ctxt {
- struct mutex lock;
- int opened;
- struct msm_rpc_endpoint *ept;
- struct msm_snd_endpoints *snd_epts;
- +
- + struct switch_dev snd_dev_info;
- };
- struct snd_sys_ctxt {
- @@ -46,6 +52,12 @@
- static struct snd_ctxt the_snd;
- +#define SND_DEV 0
- +#define EAR_MUTE 1
- +#define MIC_MUTE 2
- +#define SND_DEV_INFO_NUM 3
- +static int keep_snd_dev_info[SND_DEV_INFO_NUM] = {0, 0, 0};
- +
- #define RPC_SND_PROG 0x30000002
- #define RPC_SND_CB_PROG 0x31000002
- @@ -55,7 +67,9 @@
- #define SND_SET_VOLUME_PROC 3
- #define SND_AVC_CTL_PROC 29
- #define SND_AGC_CTL_PROC 30
- -
- + #define SND_AUDIO_LOOPBACK_PROC 37
- + #define SND_HPH_AMP_CTL_PROC 38
- +
- struct rpc_snd_set_device_args {
- uint32_t device;
- uint32_t ear_mute;
- @@ -86,6 +100,19 @@
- uint32_t client_data;
- };
- +
- +struct rpc_snd_lb_ctl_args {
- + uint32_t lb_ctl;
- + uint32_t cb_func;
- + uint32_t client_data;
- +};
- +
- +struct rpc_snd_hph_amp_ctl_args {
- + uint32_t amp_ctl;
- + uint32_t cb_func;
- + uint32_t client_data;
- +};
- +
- struct snd_set_device_msg {
- struct rpc_request_hdr hdr;
- struct rpc_snd_set_device_args args;
- @@ -106,6 +133,17 @@
- struct rpc_snd_agc_ctl_args args;
- };
- +
- +struct snd_set_lb_msg {
- + struct rpc_request_hdr hdr;
- + struct rpc_snd_lb_ctl_args args;
- +};
- +
- +struct snd_hph_amp_msg {
- + struct rpc_request_hdr hdr;
- + struct rpc_snd_hph_amp_ctl_args args;
- +};
- +
- struct snd_endpoint *get_snd_endpoints(int *size);
- static inline int check_mute(int mute)
- @@ -149,6 +187,7 @@
- struct snd_set_volume_msg vmsg;
- struct snd_avc_ctl_msg avc_msg;
- struct snd_agc_ctl_msg agc_msg;
- + struct snd_set_lb_msg lb_msg;
- struct msm_snd_device_config dev;
- struct msm_snd_volume_config vol;
- @@ -156,6 +195,7 @@
- int rc = 0;
- uint32_t avc, agc;
- + uint32_t set_lb;
- mutex_lock(&snd->lock);
- switch (cmd) {
- @@ -184,6 +224,13 @@
- rc = msm_rpc_call(snd->ept,
- SND_SET_DEVICE_PROC,
- &dmsg, sizeof(dmsg), 5 * HZ);
- +
- + if (dev.device != 28)
- + {
- + keep_snd_dev_info[SND_DEV] = dev.device;
- + }
- + keep_snd_dev_info[EAR_MUTE] = dev.ear_mute;
- + keep_snd_dev_info[MIC_MUTE] = dev.mic_mute;
- break;
- case SND_SET_VOLUME:
- @@ -264,6 +311,28 @@
- rc = get_endpoint(snd, arg);
- break;
- +
- + case SND_SET_AUDIO_LOOPBACK:
- + if (get_user(set_lb, (uint32_t __user *) arg)) {
- + rc = -EFAULT;
- + break;
- + } else if ((set_lb != 1) && (set_lb != 0)) {
- + rc = -EINVAL;
- + break;
- + }
- +
- + lb_msg.args.lb_ctl = cpu_to_be32(set_lb);
- +
- + lb_msg.args.cb_func = -1;
- + lb_msg.args.client_data = 0;
- +
- + pr_info("snd_lb_ctl %d\n", set_lb);
- +
- + rc = msm_rpc_call(snd->ept,
- + SND_AUDIO_LOOPBACK_PROC,
- + &lb_msg, sizeof(lb_msg), 5 * HZ);
- + break;
- +
- default:
- MM_ERR("unknown command\n");
- rc = -EINVAL;
- @@ -271,6 +340,8 @@
- }
- mutex_unlock(&snd->lock);
- + MM_INFO("chenjun:rc = %d\n", rc);
- +
- return rc;
- }
- @@ -579,6 +650,29 @@
- return status ? : size;
- }
- +int snd_hph_amp_ctl(uint32_t on)
- +{
- + struct snd_ctxt *snd = &the_snd;
- + struct snd_hph_amp_msg hph_amp_msg;
- + int rc = 0;
- +
- + pr_info("snd_hph_amp_ctl:%d\n", on);
- +
- + mutex_lock(&snd->lock);
- +
- + hph_amp_msg.args.amp_ctl = cpu_to_be32(on);
- + hph_amp_msg.args.cb_func = -1;
- + hph_amp_msg.args.client_data = 0;
- +
- + rc = msm_rpc_call(snd->ept,
- + SND_HPH_AMP_CTL_PROC,
- + &hph_amp_msg, sizeof(hph_amp_msg), 5 * HZ);
- +
- + mutex_unlock(&snd->lock);
- +
- + return rc;
- +}
- +
- static DEVICE_ATTR(agc, S_IWUSR | S_IRUGO,
- NULL, snd_agc_store);
- @@ -591,6 +685,16 @@
- static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO,
- NULL, snd_vol_store);
- +static ssize_t print_snd_dev_name(struct switch_dev *sdev, char *buf)
- +{
- + return sprintf(buf, "%s\n", "dev,ear_mute,mic_mute");
- +}
- +
- +static ssize_t print_snd_dev_state(struct switch_dev *sdev, char *buf)
- +{
- + return sprintf(buf, "%d,%d,%d\n", keep_snd_dev_info[SND_DEV], keep_snd_dev_info[EAR_MUTE], keep_snd_dev_info[MIC_MUTE]);
- +}
- +
- static int snd_probe(struct platform_device *pdev)
- {
- struct snd_ctxt *snd = &the_snd;
- @@ -639,6 +743,13 @@
- &dev_attr_device);
- misc_deregister(&snd_misc);
- }
- +
- + snd->snd_dev_info.name = "snd_debug";
- + snd->snd_dev_info.print_name = print_snd_dev_name;
- + snd->snd_dev_info.print_state = print_snd_dev_state;
- + rc = switch_dev_register(&snd->snd_dev_info);
- + if (rc < 0)
- + switch_dev_unregister(&snd->snd_dev_info);
- return rc;
- }
- diff -urB -x .git msm/arch/arm/mach-msm/rpc_hsusb.c zte/arch/arm/mach-msm/rpc_hsusb.c
- --- msm/arch/arm/mach-msm/rpc_hsusb.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/rpc_hsusb.c Mon Oct 18 11:33:10 2010
- @@ -47,6 +47,7 @@
- unsigned long reset_rework_installed;
- unsigned long enable_pmic_ulpi_data0;
- unsigned long disable_pmic_ulpi_data0;
- + unsigned long get_usb_conf_nv_value;
- };
- static struct msm_hsusb_rpc_ids usb_rpc_ids;
- @@ -66,6 +67,7 @@
- usb_rpc_ids.reset_rework_installed = 17;
- usb_rpc_ids.enable_pmic_ulpi_data0 = 18;
- usb_rpc_ids.disable_pmic_ulpi_data0 = 19;
- + usb_rpc_ids.get_usb_conf_nv_value = 99;
- return 0;
- } else if (vers == 0x00010002) {
- usb_rpc_ids.prog = 0x30000064;
- @@ -79,6 +81,7 @@
- usb_rpc_ids.reset_rework_installed = 17;
- usb_rpc_ids.enable_pmic_ulpi_data0 = 18;
- usb_rpc_ids.disable_pmic_ulpi_data0 = 19;
- + usb_rpc_ids.get_usb_conf_nv_value = 99;
- return 0;
- } else {
- printk(KERN_INFO "%s: no matches found for version\n",
- @@ -358,6 +361,51 @@
- return rc;
- }
- EXPORT_SYMBOL(msm_hsusb_is_serial_num_null);
- +int msm_hsusb_get_set_usb_conf_nv_value(uint32_t nv_item,uint32_t value,uint32_t is_write)
- +{
- + int rc = 0;
- + struct hsusb_phy_start_req {
- + struct rpc_request_hdr hdr;
- + uint32_t nv_item;
- + uint32_t value;
- + uint32_t is_write;
- + } req;
- + struct nv23_value_rep {
- + struct rpc_reply_hdr hdr;
- + int value;
- + } rep;
- + if (!usb_ep || IS_ERR(usb_ep)) {
- + printk(KERN_ERR "%s: rpc connect failed: rc = %ld\n",
- + __func__, PTR_ERR(usb_ep));
- + return -EAGAIN;
- + }
- + if (!usb_rpc_ids.get_usb_conf_nv_value) {
- + printk(KERN_ERR "%s: proc id not supported \n", __func__);
- + return -ENODATA;
- + }
- + req.nv_item = cpu_to_be32(nv_item);
- + req.value = cpu_to_be32(value);
- + req.is_write =cpu_to_be32(is_write);
- + rc = msm_rpc_call_reply(usb_ep, usb_rpc_ids.get_usb_conf_nv_value,
- + &req, sizeof(req),
- + &rep, sizeof(rep),
- + 5 * HZ);
- + printk("======return value=%d \n\n",be32_to_cpu(rep.value));
- + if (rc < 0)
- + {
- + printk(KERN_ERR "%s: rpc call failed! error: %d\n" ,
- + __func__, rc);
- + return rc;
- + }
- + else
- + {
- + printk(KERN_ERR "%s: rpc call success\n" ,
- + __func__);
- + }
- + rc = be32_to_cpu(rep.value);
- + return rc;
- +}
- +EXPORT_SYMBOL(msm_hsusb_get_set_usb_conf_nv_value);
- int msm_chg_usb_charger_connected(uint32_t device)
- {
- diff -urB -x .git msm/arch/arm/mach-msm/rpc_pmapp.c zte/arch/arm/mach-msm/rpc_pmapp.c
- --- msm/arch/arm/mach-msm/rpc_pmapp.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/rpc_pmapp.c Mon Oct 18 11:33:34 2010
- @@ -260,10 +260,6 @@
- int msm_pm_app_rpc_init(void)
- {
- - if (!machine_is_qsd8x50_ffa() && !machine_is_qsd8x50a_ffa()
- - && !machine_is_msm7x27_ffa())
- - return -ENOTSUPP;
- -
- boost_vreg = vreg_get(NULL, "boost");
- if (IS_ERR(boost_vreg)) {
- pr_err("%s: boost vreg get failed\n", __func__);
- Only in zte/arch/arm/mach-msm: smd_rpc_sym.c
- diff -urB -x .git msm/arch/arm/mach-msm/smem_log.c zte/arch/arm/mach-msm/smem_log.c
- --- msm/arch/arm/mach-msm/smem_log.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/smem_log.c Mon Oct 18 11:35:16 2010
- @@ -72,6 +73,8 @@
- #include <linux/sched.h>
- #include <linux/wait.h>
- #include <linux/delay.h>
- +#include <linux/zte_memlog.h>
- +#include <linux/vmalloc.h>
- #include <mach/msm_iomap.h>
- #include <mach/smem_log.h>
- @@ -111,7 +114,7 @@
- uint32_t data3;
- };
- -#define SMEM_LOG_NUM_ENTRIES 2000
- +#define SMEM_LOG_NUM_ENTRIES 20000
- #define SMEM_LOG_EVENTS_SIZE (sizeof(struct smem_log_item) * \
- SMEM_LOG_NUM_ENTRIES)
- @@ -154,6 +157,27 @@
- static struct smem_log_inst inst[NUM];
- +typedef struct {
- + uint32_t magic;
- + struct {
- + volatile uint32_t smem_log_write_idx;
- + volatile uint32_t smem_log_write_wrap;
- + } log_area_info[NUM];
- +} smem_log_info;
- +
- +static smem_log_info *log_info;
- +
- +#define SMEM_LOG_MPROC_OFFSET SMEM_LOG_ENTRY_OFFSET
- +#define SMEM_LOG_STATIC_OFFSET (SMEM_LOG_MPROC_OFFSET + SMEM_LOG_EVENTS_SIZE)
- +#define SMEM_LOG_POWER_OFFSET (SMEM_LOG_STATIC_OFFSET + SMEM_STATIC_LOG_EVENTS_SIZE)
- +static uint32_t log_area_offset[NUM] = {
- + SMEM_LOG_MPROC_OFFSET,
- + SMEM_LOG_STATIC_OFFSET,
- + SMEM_LOG_POWER_OFFSET
- +};
- +
- +#define SMEM_MAGIC 0xdeadbeef
- +
- #if defined(CONFIG_DEBUG_FS)
- #define HSIZE 13
- @@ -846,16 +870,19 @@
- {
- int ret;
- - inst[GEN].which_log = GEN;
- - inst[GEN].events =
- - (struct smem_log_item *)smem_alloc(SMEM_SMEM_LOG_EVENTS,
- - SMEM_LOG_EVENTS_SIZE);
- - inst[GEN].idx = (uint32_t *)smem_alloc(SMEM_SMEM_LOG_IDX,
- - sizeof(uint32_t));
- - if (!inst[GEN].events || !inst[GEN].idx) {
- - pr_err("%s: no log or log_idx allocated, "
- - "smem_log disabled\n", __func__);
- + log_info = (smem_log_info *)ioremap(MSM_SMEM_RAM_PHYS, MSM_SMEM_RAM_SIZE);
- + if (!log_info) {
- + pr_err("can't get remap MSM_RAM_CONSOLE_PHYS\n");
- + return -ENOMEM;
- + }
- + if (log_info->magic != SMEM_MAGIC) {
- + memset(log_info, 0, sizeof(*log_info));
- + log_info->magic = SMEM_MAGIC;
- }
- +
- + inst[GEN].which_log = GEN;
- + inst[GEN].events = (struct smem_log_item *)((uint32_t)log_info + log_area_offset[GEN]);
- + inst[GEN].idx = (uint32_t *)&(log_info->log_area_info[GEN].smem_log_write_idx);
- inst[GEN].num = SMEM_LOG_NUM_ENTRIES;
- inst[GEN].read_idx = 0;
- inst[GEN].last_read_avail = SMEM_LOG_NUM_ENTRIES;
- @@ -863,16 +890,8 @@
- inst[GEN].remote_spinlock = &remote_spinlock;
- inst[STA].which_log = STA;
- - inst[STA].events =
- - (struct smem_log_item *)
- - smem_alloc(SMEM_SMEM_STATIC_LOG_EVENTS,
- - SMEM_STATIC_LOG_EVENTS_SIZE);
- - inst[STA].idx = (uint32_t *)smem_alloc(SMEM_SMEM_STATIC_LOG_IDX,
- - sizeof(uint32_t));
- - if (!inst[STA].events || !inst[STA].idx) {
- - pr_err("%s: no static log or log_idx "
- - "allocated, smem_log disabled\n", __func__);
- - }
- + inst[STA].events = (struct smem_log_item *)((uint32_t)log_info + log_area_offset[STA]);
- + inst[STA].idx = (uint32_t *)&(log_info->log_area_info[STA].smem_log_write_idx);
- inst[STA].num = SMEM_LOG_NUM_STATIC_ENTRIES;
- inst[STA].read_idx = 0;
- inst[STA].last_read_avail = SMEM_LOG_NUM_ENTRIES;
- @@ -880,16 +899,8 @@
- inst[STA].remote_spinlock = &remote_spinlock_static;
- inst[POW].which_log = POW;
- - inst[POW].events =
- - (struct smem_log_item *)
- - smem_alloc(SMEM_SMEM_LOG_POWER_EVENTS,
- - SMEM_POWER_LOG_EVENTS_SIZE);
- - inst[POW].idx = (uint32_t *)smem_alloc(SMEM_SMEM_LOG_POWER_IDX,
- - sizeof(uint32_t));
- - if (!inst[POW].events || !inst[POW].idx) {
- - pr_err("%s: no power log or log_idx "
- - "allocated, smem_log disabled\n", __func__);
- - }
- + inst[POW].events = (struct smem_log_item *)((uint32_t)log_info + log_area_offset[POW]);
- + inst[POW].idx = (uint32_t *)&(log_info->log_area_info[POW].smem_log_write_idx);
- inst[POW].num = SMEM_LOG_NUM_POWER_ENTRIES;
- inst[POW].read_idx = 0;
- inst[POW].last_read_avail = SMEM_LOG_NUM_ENTRIES;
- @@ -1844,7 +1855,7 @@
- return _debug_dump_voters(buf, max);
- }
- -static char debug_buffer[EVENTS_PRINT_SIZE];
- +static char *debug_buffer = NULL;
- static ssize_t debug_read(struct file *file, char __user *buf,
- size_t count, loff_t *ppos)
- @@ -1852,11 +1863,24 @@
- int r;
- static int bsize;
- int (*fill)(char *, int, uint32_t) = file->private_data;
- +
- + /* Use vmalloc, __get_free_pages may fail. */
- + if (!debug_buffer) {
- + debug_buffer = (char *)vmalloc(EVENTS_PRINT_SIZE);
- + if (!debug_buffer)
- + return 0;
- + }
- if (!(*ppos))
- bsize = fill(debug_buffer, EVENTS_PRINT_SIZE, 0);
- DBG("%s: count %d ppos %d\n", __func__, count, (unsigned int)*ppos);
- r = simple_read_from_buffer(buf, count, ppos, debug_buffer,
- bsize);
- + if (r == 0) {
- + if (debug_buffer) {
- + vfree(debug_buffer);
- + debug_buffer = NULL;
- + }
- + }
- return r;
- }
- diff -urB -x .git msm/arch/arm/mach-msm/socinfo.c zte/arch/arm/mach-msm/socinfo.c
- --- msm/arch/arm/mach-msm/socinfo.c Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/socinfo.c Fri Oct 15 17:41:38 2010
- @@ -334,6 +334,31 @@
- return snprintf(buf, PAGE_SIZE, "%-.32s\n", hw_platform[hw_type]);
- }
- +#ifdef CONFIG_ZTE_PLATFORM
- +#ifdef CONFIG_ZTE_FTM_FLAG_SUPPORT
- +static int g_zte_ftm_flag;
- +void zte_ftm_set_value(int val)
- +{
- + g_zte_ftm_flag = val;
- +}
- +int zte_get_ftm_flag(void)
- +{
- + return g_zte_ftm_flag;
- +}
- +static ssize_t
- +socinfo_show_zte_ftm(struct sys_device *dev,
- + struct sysdev_attribute *attr,
- + char *buf)
- +{
- + return snprintf(buf, PAGE_SIZE, "%u\n", g_zte_ftm_flag);
- +}
- +
- +static struct sysdev_attribute socinfo_zte_ftm_files[] = {
- + _SYSDEV_ATTR(zte_ftm_flag, 0444, socinfo_show_zte_ftm, NULL),
- +};
- +#endif
- +#endif
- +
- static ssize_t
- socinfo_show_platform_version(struct sys_device *dev,
- struct sysdev_attribute *attr,
- @@ -413,6 +438,13 @@
- __func__, err);
- return;
- }
- +#ifdef CONFIG_ZTE_PLATFORM
- +#ifdef CONFIG_ZTE_FTM_FLAG_SUPPORT
- + socinfo_create_files(&soc_sys_device, socinfo_zte_ftm_files,
- + ARRAY_SIZE(socinfo_zte_ftm_files));
- +#endif
- +#endif
- +
- socinfo_create_files(&soc_sys_device, socinfo_v1_files,
- ARRAY_SIZE(socinfo_v1_files));
- if (socinfo->v1.format < 2)
- diff -urB -x .git msm/arch/arm/mach-msm/socinfo.h zte/arch/arm/mach-msm/socinfo.h
- --- msm/arch/arm/mach-msm/socinfo.h Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mach-msm/socinfo.h Wed Oct 13 18:07:20 2010
- @@ -50,6 +50,11 @@
- };
- enum msm_cpu socinfo_get_msm_cpu(void);
- +#ifdef CONFIG_ZTE_PLATFORM
- +#ifdef CONFIG_ZTE_FTM_FLAG_SUPPORT
- +void zte_ftm_set_value(int val);
- +#endif
- +#endif
- uint32_t socinfo_get_id(void);
- uint32_t socinfo_get_version(void);
- char *socinfo_get_build_id(void);
- diff -urB -x .git msm/arch/arm/mm/Kconfig zte/arch/arm/mm/Kconfig
- --- msm/arch/arm/mm/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/mm/Kconfig Wed Oct 13 18:07:42 2010
- @@ -719,7 +719,7 @@
- config CACHE_L2X0
- bool "Enable the L2x0 outer cache controller"
- - depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || REALVIEW_EB_A9MP || MACH_MSM7X27_SURF || MACH_MSM7X27_FFA
- + depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || REALVIEW_EB_A9MP || MACH_MSM7X27_SURF || MACH_MSM7X27_FFA || ZTE_PLATFORM
- default y
- select OUTER_CACHE
- help
- diff -urB -x .git msm/arch/arm/tools/mach-types zte/arch/arm/tools/mach-types
- --- msm/arch/arm/tools/mach-types Mon Nov 1 13:46:22 2010
- +++ zte/arch/arm/tools/mach-types Wed Oct 13 18:07:10 2010
- @@ -2140,3 +2140,9 @@
- qsd8x50_ffa MACH_QSD8X50_FFA QSD8X50_FFA 1008002
- qsd8x50a_surf MACH_QSD8X50A_SURF QSD8X50A_SURF 1008003
- qsd8x50a_ffa MACH_QSD8X50A_FFA QSD8X50A_FFA 1008004
- +raise MACH_RAISE RAISE 1009001
- +mooncake MACH_MOONCAKE MOONCAKE 1009002
- +joe MACH_JOE JOE 1009003
- +blade MACH_BLADE BLADE 1009004
- +smooth MACH_SMOOTH SMOOTH 1009005
- +r750 MACH_R750 R750 1009006
- Only in zte/drivers/char: consolemap_deftbl.c
- Only in zte/drivers/char: defkeymap.c
- diff -urB -x .git msm/drivers/char/msm_kgsl/kgsl.c zte/drivers/char/msm_kgsl/kgsl.c
- --- msm/drivers/char/msm_kgsl/kgsl.c Mon Nov 1 14:41:52 2010
- +++ zte/drivers/char/msm_kgsl/kgsl.c Mon Oct 18 11:37:40 2010
- @@ -253,10 +254,6 @@
- if (kgsl_driver.clk_freq[KGSL_3D_MIN_FREQ])
- clk_set_min_rate(kgsl_driver.yamato_grp_src_clk,
- kgsl_driver.clk_freq[KGSL_3D_MIN_FREQ]);
- - if ((kgsl_driver.g12_device.hwaccess_blocked ==
- - KGSL_TRUE) ||
- - (kgsl_driver.power_flags &
- - KGSL_PWRFLAGS_G12_CLK_OFF))
- pm_qos_update_requirement(
- PM_QOS_SYSTEM_BUS_FREQ,
- DRIVER_NAME, PM_QOS_DEFAULT_VALUE);
- diff -urB -x .git msm/drivers/char/vt.c zte/drivers/char/vt.c
- --- msm/drivers/char/vt.c Mon Nov 1 12:09:49 2010
- +++ zte/drivers/char/vt.c Mon Oct 18 11:38:14 2010
- @@ -1617,7 +1618,7 @@
- vc->vc_decscnm = 0;
- vc->vc_decom = 0;
- vc->vc_decawm = 1;
- - vc->vc_deccm = 1;
- + vc->vc_deccm = 0;
- vc->vc_decim = 0;
- set_kbd(vc, decarm);
- diff -urB -x .git msm/drivers/i2c/busses/i2c-gpio.c zte/drivers/i2c/busses/i2c-gpio.c
- --- msm/drivers/i2c/busses/i2c-gpio.c Mon Nov 1 12:09:51 2010
- +++ zte/drivers/i2c/busses/i2c-gpio.c Fri Oct 15 17:52:16 2010
- @@ -128,8 +129,10 @@
- else if (pdata->scl_is_output_only)
- bit_data->udelay = 50; /* 10 kHz */
- else
- + #if 0
- bit_data->udelay = 5; /* 100 kHz */
- -
- + #endif
- + bit_data->udelay = 2; /* 400 kHz */
- if (pdata->timeout)
- bit_data->timeout = pdata->timeout;
- else
- diff -urB -x .git msm/drivers/i2c/busses/i2c-msm.c zte/drivers/i2c/busses/i2c-msm.c
- --- msm/drivers/i2c/busses/i2c-msm.c Mon Nov 1 14:29:40 2010
- +++ zte/drivers/i2c/busses/i2c-msm.c Mon Oct 18 11:41:24 2010
- @@ -601,11 +601,22 @@
- ret = -ENOSYS;
- goto err_clk_get_failed;
- }
- - if (!pdata->msm_i2c_config_gpio) {
- - dev_err(&pdev->dev, "config_gpio function not initialized\n");
- - ret = -ENOSYS;
- - goto err_clk_get_failed;
- +
- +#ifdef CONFIG_ZTE_PLATFORM
- + {
- + printk(KERN_INFO" Warning: msm on-chip aux i2c bus disabled on Board mooncake!\n");
- + }
- +#else
- + {
- + if (!pdata->msm_i2c_config_gpio) {
- +
- + dev_err(&pdev->dev, "config_gpio function not initialized\n");
- + ret = -ENOSYS;
- + goto err_clk_get_failed;
- + }
- }
- +#endif
- +
- /* We support frequencies upto FAST Mode(400KHz) */
- if (pdata->clk_freq <= 0 || pdata->clk_freq > 400000) {
- dev_err(&pdev->dev, "clock frequency not supported\n");
- @@ -666,19 +677,27 @@
- goto err_i2c_add_adapter_failed;
- }
- - i2c_set_adapdata(&dev->adap_aux, dev);
- - dev->adap_aux.algo = &msm_i2c_algo;
- - strlcpy(dev->adap_aux.name,
- - "MSM I2C adapter-AUX",
- - sizeof(dev->adap_aux.name));
- -
- - dev->adap_aux.nr = pdev->id + 1;
- - ret = i2c_add_numbered_adapter(&dev->adap_aux);
- - if (ret) {
- - dev_err(&pdev->dev, "auxiliary i2c_add_adapter failed\n");
- - i2c_del_adapter(&dev->adap_pri);
- - goto err_i2c_add_adapter_failed;
- +
- +#ifdef CONFIG_ZTE_PLATFORM
- + {
- + }
- +#else
- + {
- + i2c_set_adapdata(&dev->adap_aux, dev);
- + dev->adap_aux.algo = &msm_i2c_algo;
- + strlcpy(dev->adap_aux.name,
- + "MSM I2C adapter-AUX",
- + sizeof(dev->adap_aux.name));
- +
- + dev->adap_aux.nr = pdev->id + 1;
- + ret = i2c_add_numbered_adapter(&dev->adap_aux);
- + if (ret) {
- + dev_err(&pdev->dev, "auxiliary i2c_add_adapter failed\n");
- + i2c_del_adapter(&dev->adap_pri);
- + goto err_i2c_add_adapter_failed;
- + }
- }
- +#endif
- ret = request_irq(dev->irq, msm_i2c_interrupt,
- IRQF_TRIGGER_RISING, pdev->name, dev);
- if (ret) {
- @@ -693,10 +712,17 @@
- dev->clk_state = 0;
- /* Config GPIOs for primary and secondary lines */
- pdata->msm_i2c_config_gpio(dev->adap_pri.nr, 1);
- - pdata->msm_i2c_config_gpio(dev->adap_aux.nr, 1);
- +
- +#ifdef CONFIG_ZTE_PLATFORM
- + {
- + }
- +#else
- + {
- + pdata->msm_i2c_config_gpio(dev->adap_aux.nr, 1);
- + }
- +#endif
- clk_disable(dev->clk);
- setup_timer(&dev->pwr_timer, msm_i2c_pwr_timer, (unsigned long) dev);
- -
- return 0;
- /* free_irq(dev->irq, dev); */
- diff -urB -x .git msm/drivers/i2c/chips/Kconfig zte/drivers/i2c/chips/Kconfig
- --- msm/drivers/i2c/chips/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/drivers/i2c/chips/Kconfig Wed Oct 13 18:15:50 2010
- @@ -102,11 +102,35 @@
- This driver can also be built as a module. If so, the module
- will be called tsl2550.
- +config SENSORS_TSL2771
- + tristate "Taos TSL2771 ambient light and prox sensor"
- + depends on I2C
- + default n
- + help
- + If you say yes here you get support for the Taos TSL2771
- + ambient light and prox sensor.
- +
- +config SENSORS_AK8973
- + tristate "AK8973"
- + depends on I2C
- + default n
- + help
- + If you say yes here you get support for Asahi Kasei's
- + orientation sensor AK8973.
- +
- config SENSORS_AKM8976
- tristate "AKM8976 Compass Driver"
- depends on I2C
- help
- AKM8976 Compass Driver implemented by HTC.
- +
- +config SENSOR_LIS302DL
- + tristate "ST LIS302DL acceleration sensor support"
- + depends on I2C
- + default y
- + help
- + if your say yes here your get support for LIS302
- + acceleration sensor support
- config SENSORS_PCA963X
- tristate "Philips PCA963X 4-bit I2C-bus LED"
- diff -urB -x .git msm/drivers/i2c/chips/Makefile zte/drivers/i2c/chips/Makefile
- --- msm/drivers/i2c/chips/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/i2c/chips/Makefile Wed Oct 13 18:15:50 2010
- @@ -18,9 +18,12 @@
- obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
- obj-$(CONFIG_PCF8575) += pcf8575.o
- obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
- +obj-$(CONFIG_SENSORS_AK8973) += akm8973.o
- obj-$(CONFIG_SENSORS_TSL2550) += tsl2550.o
- obj-$(CONFIG_SENSORS_MT9T013) += mt9t013.o
- +obj-$(CONFIG_SENSOR_LIS302DL) += lis302dl.o
- +obj-$(CONFIG_SENSORS_TSL2771) += taos.o
- ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
- EXTRA_CFLAGS += -DDEBUG
- endif
- Only in zte/drivers/i2c/chips: akm8973.c
- Only in zte/drivers/i2c/chips: lis302dl.c
- Only in zte/drivers/i2c/chips: taos.c
- Only in zte/drivers/i2c/chips: taos_common.h
- diff -urB -x .git msm/drivers/input/misc/gpio_matrix.c zte/drivers/input/misc/gpio_matrix.c
- --- msm/drivers/input/misc/gpio_matrix.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/misc/gpio_matrix.c Mon Oct 18 11:59:02 2010
- @@ -20,6 +20,14 @@
- #include <linux/interrupt.h>
- #include <linux/wakelock.h>
- +#if defined(CONFIG_MACH_R750)
- +#define TS_KEY_REPORT
- +#endif
- +
- +#if defined(CONFIG_MACH_SMOOTH)
- +#define FLIP_DET
- +#endif
- +
- struct gpio_kp {
- struct input_dev *input_dev;
- struct gpio_event_matrix_info *keypad_info;
- @@ -33,6 +41,55 @@
- unsigned long keys_pressed[0];
- };
- +#ifdef FLIP_DET
- +#define FLIP_DET_IRQ MSM_GPIO_TO_INT(49)
- +
- +static irqreturn_t flip_detect_irq_handler(int irq, void *dev_id)
- +{
- + struct gpio_kp *kp = dev_id;
- +
- + disable_irq_nosync(irq);
- +
- + if(gpio_get_value(49) == 0)
- + {
- + input_report_key(kp->input_dev, KEY_FLIP_DOWN, 1);
- + input_report_key(kp->input_dev, KEY_FLIP_DOWN, 0);
- + }
- + else
- + {
- + input_report_key(kp->input_dev, KEY_FLIP_UP, 1);
- + input_report_key(kp->input_dev, KEY_FLIP_UP, 0);
- + }
- +
- + enable_irq(irq);
- + return IRQ_HANDLED;
- +}
- +
- +static int slip_detect_init(struct gpio_kp *kp)
- +{
- + int err;
- +
- + err = request_irq(FLIP_DET_IRQ, flip_detect_irq_handler, (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING), "gpio-event", kp);//ZTE_KEY_ZT_20100513_003
- + if (err)
- + {
- + pr_err("gpiomatrix: request_irq failed for flip detect\n");
- + goto err_request_irq_failed;
- + }
- +
- + err = set_irq_wake(FLIP_DET_IRQ, 1);
- + if (err)
- + {
- + pr_err("gpiomatrix: request_irq failed for flip detect\n");
- + goto err_request_irq_failed;
- + }
- + return 0;
- +
- +err_request_irq_failed:
- + free_irq(FLIP_DET_IRQ, kp);
- + return 1;
- +}
- +#endif
- +
- static void clear_phantom_key(struct gpio_kp *kp, int out, int in)
- {
- struct gpio_event_matrix_info *mi = kp->keypad_info;
- @@ -131,7 +188,11 @@
- struct gpio_kp *kp = container_of(timer, struct gpio_kp, timer);
- struct gpio_event_matrix_info *mi = kp->keypad_info;
- unsigned gpio_keypad_flags = mi->flags;
- +#ifdef CONFIG_ZTE_PLATFORM
- + unsigned polarity = !!(gpio_keypad_flags & !GPIOKPF_ACTIVE_HIGH);
- +#else
- unsigned polarity = !!(gpio_keypad_flags & GPIOKPF_ACTIVE_HIGH);
- +#endif
- out = kp->current_output;
- if (out == mi->noutputs) {
- @@ -218,7 +279,12 @@
- for (i = 0; i < mi->noutputs; i++) {
- if (gpio_keypad_flags & GPIOKPF_DRIVE_INACTIVE)
- gpio_set_value(mi->output_gpios[i],
- +#ifdef CONFIG_ZTE_PLATFORM
- + (gpio_keypad_flags & GPIOKPF_ACTIVE_HIGH));
- +#else
- !(gpio_keypad_flags & GPIOKPF_ACTIVE_HIGH));
- +#endif
- +
- else
- gpio_direction_input(mi->output_gpios[i]);
- }
- @@ -246,7 +312,12 @@
- request_flags = IRQF_TRIGGER_LOW;
- break;
- case GPIOKPF_LEVEL_TRIGGERED_IRQ | GPIOKPF_ACTIVE_HIGH:
- +#ifdef CONFIG_ZTE_PLATFORM
- + request_flags = IRQF_TRIGGER_LOW;
- +#else
- request_flags = IRQF_TRIGGER_HIGH;
- +#endif
- +
- break;
- }
- @@ -261,11 +332,13 @@
- "irq %d\n", mi->input_gpios[i], irq);
- goto err_request_irq_failed;
- }
- +#ifndef CONFIG_ZTE_PLATFORM
- err = set_irq_wake(irq, 1);
- if (err) {
- pr_err("gpiomatrix: set_irq_wake failed for input %d, "
- "irq %d\n", mi->input_gpios[i], irq);
- }
- +#endif
- disable_irq(irq);
- }
- return 0;
- @@ -279,6 +352,16 @@
- return err;
- }
- +#ifdef TS_KEY_REPORT
- +struct input_dev *input_keypad_dev = NULL;
- +
- +struct input_dev *get_keyinput_dev(void)
- +{
- + return input_keypad_dev;
- +}
- +EXPORT_SYMBOL(get_keyinput_dev);
- +#endif
- +
- int gpio_event_matrix_func(struct input_dev *input_dev,
- struct gpio_event_info *info, void **data, int func)
- {
- @@ -319,6 +402,18 @@
- __set_bit(mi->keymap[i], input_dev->keybit);
- }
- +#ifdef TS_KEY_REPORT
- + __set_bit(KEY_MENU, input_dev->keybit);
- + __set_bit(KEY_HOME, input_dev->keybit);
- + __set_bit(KEY_BACK, input_dev->keybit);
- + input_keypad_dev = kp->input_dev;
- +#endif
- +
- +#ifdef FLIP_DET
- + __set_bit(KEY_FLIP_UP, input_dev->keybit);
- + __set_bit(KEY_FLIP_DOWN, input_dev->keybit);
- +#endif
- +
- for (i = 0; i < mi->noutputs; i++) {
- if (gpio_cansleep(mi->output_gpios[i])) {
- pr_err("gpiomatrix: unsupported output gpio %d,"
- @@ -334,7 +429,11 @@
- }
- if (mi->flags & GPIOKPF_DRIVE_INACTIVE)
- err = gpio_direction_output(mi->output_gpios[i],
- +#ifdef CONFIG_ZTE_PLATFORM
- + (mi->flags & GPIOKPF_ACTIVE_HIGH));
- +#else
- !(mi->flags & GPIOKPF_ACTIVE_HIGH));
- +#endif
- else
- err = gpio_direction_input(mi->output_gpios[i]);
- if (err) {
- @@ -375,6 +474,11 @@
- hrtimer_start(&kp->timer, ktime_set(0, 10000),
- HRTIMER_MODE_REL);
- +#ifdef FLIP_DET
- + err = slip_detect_init(kp);
- + if (err != 0)
- + pr_info("PIO Matrix Keypad Driver: init for slip detect failed\n");
- +#endif
- return 0;
- }
- diff -urB -x .git msm/drivers/input/mouse/Kconfig zte/drivers/input/mouse/Kconfig
- --- msm/drivers/input/mouse/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/mouse/Kconfig Fri Oct 15 18:22:42 2010
- @@ -321,4 +321,19 @@
- help
- Say Y here to support PXA930 Trackball mouse.
- +config AVAGO_OFN
- + tristate "AVAGO OFN(Optical Finger Navigation)"
- + depends on I2C_MSM && MACH_RAISE
- + default y
- + help
- + Say Y here if you have a ofn attached.
- + To compile this driver as a module, choose M here
- +
- +config JOGBALL_KEY
- + tristate "JOGBALL UP/DOWN/LEFT/RIGHT"
- + default n
- + help
- + Say Y here if you have a jogball attached.
- + To compile this driver as a module, choose M here
- +
- endif
- diff -urB -x .git msm/drivers/input/mouse/Makefile zte/drivers/input/mouse/Makefile
- --- msm/drivers/input/mouse/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/mouse/Makefile Fri Oct 15 18:23:00 2010
- @@ -21,6 +21,8 @@
- obj-$(CONFIG_MOUSE_OFN_ATLAB) += ofn_atlab.o
- obj-$(CONFIG_MOUSE_OFN_ATLAB_M33C01) += ofn_m33c01_atlab.o
- obj-$(CONFIG_MOUSE_GPIO) += gpio_mouse.o
- +obj-$(CONFIG_AVAGO_OFN) += avago_ofn.o
- +obj-$(CONFIG_JOGBALL_KEY) += jogball_key.o
- psmouse-objs := psmouse-base.o synaptics.o
- Only in zte/drivers/input/mouse: avago_ofn.c
- Only in zte/drivers/input/mouse: jogball_key.c
- diff -urB -x .git msm/drivers/input/touchscreen/Kconfig zte/drivers/input/touchscreen/Kconfig
- --- msm/drivers/input/touchscreen/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/touchscreen/Kconfig Sat Oct 16 11:16:26 2010
- @@ -1,4 +1,4 @@
- -#
- +
- # Touchscreen driver configuration
- #
- menuconfig INPUT_TOUCHSCREEN
- @@ -201,7 +201,7 @@
- config TOUCHSCREEN_MSM
- bool "Qualcomm MSM touchscreen controller"
- - depends on ARCH_MSM7X30
- +#depends on ARCH_MSM7X30
- default n
- help
- Say Y here if you have a 4-wire resistive touchscreen panel
- @@ -447,5 +447,9 @@
- MSM/QSD based Surf or FFAs. These hacks are required inorder
- to Android framework to receive adjusted x, y co-ordinates
- until proper calibration framework is in place.
- -
- +config TOUCHSCREEN_CYPRESS_I2C_RMI
- + tristate "Cypress i2c touchscreen"
- + depends on I2C
- + help
- + This enables support for Cypress RMI over I2C based touchscreens.
- endif
- diff -urB -x .git msm/drivers/input/touchscreen/Makefile zte/drivers/input/touchscreen/Makefile
- --- msm/drivers/input/touchscreen/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/touchscreen/Makefile Sat Oct 16 11:15:50 2010
- @@ -38,3 +40,4 @@
- wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713) += wm9713.o
- obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE) += mainstone-wm97xx.o
- obj-$(CONFIG_TOUCHSCREEN_MSM_LEGACY) += msm_touch.o
- +obj-$(CONFIG_TOUCHSCREEN_CYPRESS_I2C_RMI) += cypress_i2c_rmi.o
- Only in zte/drivers/input/touchscreen: cypress_i2c_rmi.c
- diff -urB -x .git msm/drivers/input/touchscreen/msm_ts.c zte/drivers/input/touchscreen/msm_ts.c
- --- msm/drivers/input/touchscreen/msm_ts.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/touchscreen/msm_ts.c Mon Oct 18 12:10:16 2010
- @@ -27,6 +28,7 @@
- #include <linux/mfd/marimba-tsadc.h>
- #include <mach/msm_ts.h>
- +#include <linux/jiffies.h>
- #define TSSC_CTL 0x100
- #define TSSC_CTL_PENUP_IRQ (1 << 12)
- @@ -51,6 +53,7 @@
- #define TSSC_TEST_1 0x198
- #define TSSC_TEST_1_EN_GATE_DEBOUNCE (1 << 2)
- #define TSSC_TEST_2 0x19c
- +#define TS_PENUP_TIMEOUT_MS 70 // 20 --> 70
- struct msm_ts {
- struct msm_ts_platform_data *pdata;
- @@ -58,7 +61,7 @@
- void __iomem *tssc_base;
- uint32_t ts_down:1;
- struct ts_virt_key *vkey_down;
- - struct marimba_tsadc_client *ts_client;
- + struct timer_list timer;
- };
- static uint32_t msm_tsdebug;
- @@ -70,29 +73,19 @@
- static void setup_next_sample(struct msm_ts *ts)
- {
- uint32_t tmp;
- -
- - /* 1.2ms debounce time */
- - tmp = ((2 << 7) | TSSC_CTL_DEBOUNCE_EN | TSSC_CTL_EN_AVERAGE |
- + /* 3ms debounce time */
- + tmp = ((5 << 7) | TSSC_CTL_DEBOUNCE_EN | TSSC_CTL_EN_AVERAGE |
- TSSC_CTL_MODE_MASTER | TSSC_CTL_ENABLE);
- tssc_writel(ts, tmp, TSSC_CTL);
- }
- -static struct ts_virt_key *find_virt_key(struct msm_ts *ts,
- - struct msm_ts_virtual_keys *vkeys,
- - uint32_t val)
- -{
- - int i;
- -
- - if (!vkeys)
- - return NULL;
- - for (i = 0; i < vkeys->num_keys; ++i)
- - if ((val >= vkeys->keys[i].min) && (val <= vkeys->keys[i].max))
- - return &vkeys->keys[i];
- - return NULL;
- +static void ts_timer(unsigned long arg)
- +{
- + struct msm_ts *ts = (struct msm_ts *)arg;
- + input_report_key(ts->input_dev, BTN_TOUCH, 0);
- + input_sync(ts->input_dev);
- }
- -
- -
- static irqreturn_t msm_ts_irq(int irq, void *dev_id)
- {
- struct msm_ts *ts = dev_id;
- @@ -102,7 +95,8 @@
- int x, y, z1, z2;
- int was_down;
- int down;
- -
- + int z=0;
- + del_timer_sync(&ts->timer);
- tssc_ctl = tssc_readl(ts, TSSC_CTL);
- tssc_status = tssc_readl(ts, TSSC_STATUS);
- tssc_avg12 = tssc_readl(ts, TSSC_AVG_12);
- @@ -132,71 +126,35 @@
- if (msm_tsdebug & 2)
- printk("%s: down=%d, x=%d, y=%d, z1=%d, z2=%d, status %x\n",
- __func__, down, x, y, z1, z2, tssc_status);
- -
- - if (!was_down && down) {
- - struct ts_virt_key *vkey = NULL;
- -
- - if (pdata->vkeys_y && (y > pdata->virt_y_start))
- - vkey = find_virt_key(ts, pdata->vkeys_y, x);
- - if (!vkey && ts->pdata->vkeys_x && (x > pdata->virt_x_start))
- - vkey = find_virt_key(ts, pdata->vkeys_x, y);
- -
- - if (vkey) {
- - WARN_ON(ts->vkey_down != NULL);
- - if(msm_tsdebug)
- - printk("%s: virtual key down %d\n", __func__,
- - vkey->key);
- - ts->vkey_down = vkey;
- - input_report_key(ts->input_dev, vkey->key, 1);
- - input_sync(ts->input_dev);
- - return IRQ_HANDLED;
- + if (down)
- + {
- + if ( 0 == z1 ) return IRQ_HANDLED;
- + z = ( ( z2 - z1 - 2)*x) / ( z1 + 2 );
- + z = ( 2500 - z ) * 1000 / ( 2500 - 900 );
- + if( z < 0 ) return IRQ_HANDLED;
- }
- - } else if (ts->vkey_down != NULL) {
- - if (!down) {
- - if(msm_tsdebug)
- - printk("%s: virtual key up %d\n", __func__,
- - ts->vkey_down->key);
- - input_report_key(ts->input_dev, ts->vkey_down->key, 0);
- - input_sync(ts->input_dev);
- - ts->vkey_down = NULL;
- - }
- - return IRQ_HANDLED;
- - }
- +
- - if (down) {
- + if (down)
- + {
- input_report_abs(ts->input_dev, ABS_X, x);
- input_report_abs(ts->input_dev, ABS_Y, y);
- - input_report_abs(ts->input_dev, ABS_PRESSURE, z1);
- + input_report_abs(ts->input_dev, ABS_PRESSURE, z);
- }
- input_report_key(ts->input_dev, BTN_TOUCH, down);
- input_sync(ts->input_dev);
- + if (30 == irq)mod_timer(&ts->timer,jiffies + msecs_to_jiffies(TS_PENUP_TIMEOUT_MS));
- return IRQ_HANDLED;
- }
- -
- -static void dump_tssc_regs(struct msm_ts *ts)
- -{
- -#define __dump_tssc_reg(r) \
- - do { printk(#r " %x\n", tssc_readl(ts, (r))); } while(0)
- -
- - __dump_tssc_reg(TSSC_CTL);
- - __dump_tssc_reg(TSSC_OPN);
- - __dump_tssc_reg(TSSC_SAMPLING_INT);
- - __dump_tssc_reg(TSSC_STATUS);
- - __dump_tssc_reg(TSSC_AVG_12);
- - __dump_tssc_reg(TSSC_AVG_34);
- - __dump_tssc_reg(TSSC_TEST_1);
- -#undef __dump_tssc_reg
- -}
- -
- static int __devinit msm_ts_hw_init(struct msm_ts *ts)
- {
- +#if 0
- uint32_t tmp;
- /* Enable the register clock to tssc so we can configure it. */
- tssc_writel(ts, TSSC_CTL_ENABLE, TSSC_CTL);
- /* Enable software reset*/
- - tssc_writel(ts, TSSC_CTL_SW_RESET, TSSC_CTL);
- /* op1 - measure X, 1 sample, 12bit resolution */
- tmp = (TSSC_OPN_4WIRE_X << 16) | (2 << 8) | (2 << 0);
- @@ -215,8 +173,7 @@
- tssc_writel(ts, 16, TSSC_SAMPLING_INT);
- /* Enable gating logic to fix the timing delays caused because of
- * enabling debounce logic */
- - tssc_writel(ts, TSSC_TEST_1_EN_GATE_DEBOUNCE, TSSC_TEST_1);
- -
- +#endif
- setup_next_sample(ts);
- return 0;
- @@ -230,8 +187,6 @@
- struct resource *irq1_res;
- struct resource *irq2_res;
- int err = 0;
- - int i;
- - struct marimba_tsadc_client *ts_client;
- tssc_res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "tssc");
- irq1_res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "tssc1");
- @@ -261,7 +216,7 @@
- err = -ENOMEM;
- goto err_ioremap_tssc;
- }
- -
- +#if 0
- ts_client = marimba_tsadc_register(pdev, 1);
- if (IS_ERR(ts_client)) {
- err = -ENODEV;
- @@ -276,7 +231,7 @@
- pr_err("%s: Unable to start TSADC\n", __func__);
- goto err_start_tsadc;
- }
- -
- +#endif
- ts->input_dev = input_allocate_device();
- if (ts->input_dev == NULL) {
- pr_err("failed to allocate touchscreen input device\n");
- @@ -296,19 +251,13 @@
- input_set_abs_params(ts->input_dev, ABS_PRESSURE, pdata->min_press,
- pdata->max_press, 0, 0);
- - for (i = 0; pdata->vkeys_x && (i < pdata->vkeys_x->num_keys); ++i)
- - input_set_capability(ts->input_dev, EV_KEY,
- - pdata->vkeys_x->keys[i].key);
- - for (i = 0; pdata->vkeys_y && (i < pdata->vkeys_y->num_keys); ++i)
- - input_set_capability(ts->input_dev, EV_KEY,
- - pdata->vkeys_y->keys[i].key);
- -
- err = input_register_device(ts->input_dev);
- if (err != 0) {
- pr_err("%s: failed to register input device\n", __func__);
- goto err_input_dev_reg;
- }
- + setup_timer(&ts->timer, ts_timer, (unsigned long)ts);
- msm_ts_hw_init(ts);
- err = request_irq(irq1_res->start, msm_ts_irq,
- @@ -331,7 +280,6 @@
- pr_info("%s: tssc_base=%p irq1=%d irq2=%d\n", __func__,
- ts->tssc_base, (int)irq1_res->start, (int)irq2_res->start);
- - dump_tssc_regs(ts);
- return 0;
- err_request_irq2:
- @@ -339,6 +287,7 @@
- err_request_irq1:
- /* disable the tssc */
- + del_timer_sync(&ts->timer);
- tssc_writel(ts, TSSC_CTL_ENABLE, TSSC_CTL);
- err_input_dev_reg:
- @@ -346,17 +295,19 @@
- input_free_device(ts->input_dev);
- err_alloc_input_dev:
- +#if 0
- err_start_tsadc:
- marimba_tsadc_unregister(ts->ts_client);
- err_tsadc_register:
- +#endif
- iounmap(ts->tssc_base);
- err_ioremap_tssc:
- kfree(ts);
- return err;
- }
- -
- +#if 0
- static int __devexit msm_ts_remove(struct platform_device *pdev)
- {
- struct msm_ts *ts = platform_get_drvdata(pdev);
- @@ -376,28 +327,25 @@
- return 0;
- }
- -
- +#endif
- static struct platform_driver msm_touchscreen_driver = {
- .driver = {
- .name = "msm_touchscreen",
- .owner = THIS_MODULE,
- },
- .probe = msm_ts_probe,
- - .remove = __devexit_p(msm_ts_remove),
- };
- static int __init msm_ts_init(void)
- {
- return platform_driver_register(&msm_touchscreen_driver);
- }
- -
- +#if 0
- static void __exit msm_ts_exit(void)
- {
- platform_driver_unregister(&msm_touchscreen_driver);
- }
- -
- +#endif
- device_initcall(msm_ts_init);
- -module_exit(msm_ts_exit);
- MODULE_DESCRIPTION("Qualcomm MSM/QSD Touchscreen controller driver");
- MODULE_LICENSE("GPL");
- -MODULE_ALIAS("platform:msm_touchscreen");
- diff -urB -x .git msm/drivers/input/touchscreen/synaptics_i2c_rmi.c zte/drivers/input/touchscreen/synaptics_i2c_rmi.c
- --- msm/drivers/input/touchscreen/synaptics_i2c_rmi.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/input/touchscreen/synaptics_i2c_rmi.c Thu Oct 28 12:00:58 2010
- @@ -21,33 +21,36 @@
- #include <linux/input.h>
- #include <linux/interrupt.h>
- #include <linux/io.h>
- +#include <linux/proc_fs.h>
- #include <linux/platform_device.h>
- #include <linux/synaptics_i2c_rmi.h>
- -
- -#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
- -
- +#if 1
- +#include <mach/gpio.h>
- +#endif
- +unsigned long polling_time = 30000000;
- +#if defined(CONFIG_MACH_BLADE)//P729B touchscreen enable
- +#define GPIO_TOUCH_EN_OUT 31
- +#elif defined(CONFIG_MACH_R750)//R750 touchscreen enable
- +#define GPIO_TOUCH_EN_OUT 33
- +#else//other projects
- +#define GPIO_TOUCH_EN_OUT 31
- +#endif
- static struct workqueue_struct *synaptics_wq;
- +static struct i2c_driver synaptics_ts_driver;
- +#define POLL_IN_INT
- -struct synaptics_ts_data {
- +struct synaptics_ts_data
- +{
- uint16_t addr;
- struct i2c_client *client;
- struct input_dev *input_dev;
- int use_irq;
- struct hrtimer timer;
- + struct hrtimer resume_timer;
- struct work_struct work;
- uint16_t max[2];
- - int snap_state[2][2];
- - int snap_down_on[2];
- - int snap_down_off[2];
- - int snap_up_on[2];
- - int snap_up_off[2];
- - int snap_down[2];
- - int snap_up[2];
- - uint32_t flags;
- - int (*power)(int on);
- struct early_suspend early_suspend;
- };
- -
- #ifdef CONFIG_HAS_EARLYSUSPEND
- static void synaptics_ts_early_suspend(struct early_suspend *h);
- static void synaptics_ts_late_resume(struct early_suspend *h);
- @@ -52,158 +55,149 @@
- static void synaptics_ts_early_suspend(struct early_suspend *h);
- static void synaptics_ts_late_resume(struct early_suspend *h);
- #endif
- +static int synaptics_i2c_read(struct i2c_client *client, int reg, u8 * buf, int count)
- +{
- + int rc;
- + int ret = 0;
- -static int synaptics_init_panel(struct synaptics_ts_data *ts)
- + buf[0] = 0xff;
- + buf[1] = reg >> 8;
- + rc = i2c_master_send(client, buf, 2);
- + if (rc != 2)
- {
- - int ret;
- + dev_err(&client->dev, "synaptics_i2c_read FAILED: failed of page select %d\n", rc);
- + ret = -1;
- + goto tp_i2c_rd_exit;
- + }
- + buf[0] = 0xff & reg;
- + rc = i2c_master_send(client, buf, 1);
- + if (rc != 1)
- + {
- + dev_err(&client->dev, "synaptics_i2c_read FAILED: read of register %d\n", reg);
- + ret = -1;
- + goto tp_i2c_rd_exit;
- + }
- + rc = i2c_master_recv(client, buf, count);
- + if (rc != count)
- + {
- + dev_err(&client->dev, "synaptics_i2c_read FAILED: read %d bytes from reg %d\n", count, reg);
- + ret = -1;
- + }
- - ret = i2c_smbus_write_byte_data(ts->client, 0xff, 0x10); /* page select = 0x10 */
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_write_byte_data failed for page select\n");
- - goto err_page_select_failed;
- + tp_i2c_rd_exit:
- + return ret;
- }
- - ret = i2c_smbus_write_byte_data(ts->client, 0x41, 0x04); /* Set "No Clip Z" */
- - if (ret < 0)
- - printk(KERN_ERR "i2c_smbus_write_byte_data failed for No Clip Z\n");
- -
- -err_page_select_failed:
- - ret = i2c_smbus_write_byte_data(ts->client, 0xff, 0x04); /* page select = 0x04 */
- - if (ret < 0)
- - printk(KERN_ERR "i2c_smbus_write_byte_data failed for page select\n");
- - ret = i2c_smbus_write_byte_data(ts->client, 0xf0, 0x81); /* normal operation, 80 reports per second */
- - if (ret < 0)
- - printk(KERN_ERR "synaptics_ts_resume: i2c_smbus_write_byte_data failed\n");
- +static int synaptics_i2c_write(struct i2c_client *client, int reg, u8 data)
- +{
- + u8 buf[2];
- + int rc;
- + int ret = 0;
- +
- + buf[0] = 0xff;
- + buf[1] = reg >> 8;
- + rc = i2c_master_send(client, buf, 2);
- + if (rc != 2)
- + {
- + dev_err(&client->dev, "synaptics_i2c_write FAILED: writing to reg %d\n", reg);
- + ret = -1;
- + }
- + buf[0] = 0xff & reg;
- + buf[1] = data;
- + rc = i2c_master_send(client, buf, 2);
- + if (rc != 2)
- + {
- + dev_err(&client->dev, "synaptics_i2c_write FAILED: writing to reg %d\n", reg);
- + ret = -1;
- + }
- return ret;
- }
- +static int proc_read_val(char *page, char **start,
- + off_t off, int count, int *eof, void *data)
- +{
- + int len;
- + len = sprintf(page, "%lu\n", polling_time);
- + return len;
- +}
- +static int proc_write_val(struct file *file, const char *buffer,
- + unsigned long count, void *data)
- +{
- + unsigned long val;
- + sscanf(buffer, "%lu", &val);
- + if (val >= 0) {
- + polling_time= val;
- + return count;
- + }
- + return -EINVAL;
- +}
- static void synaptics_ts_work_func(struct work_struct *work)
- {
- - int i;
- - int ret;
- - int bad_data = 0;
- - struct i2c_msg msg[2];
- - uint8_t start_reg;
- - uint8_t buf[15];
- + int ret, x, y, z, finger, w, x2, y2,w2,z2,finger2,pressure,pressure2;
- + uint8_t buf[16];
- struct synaptics_ts_data *ts = container_of(work, struct synaptics_ts_data, work);
- + finger=0;
- + ret = synaptics_i2c_read(ts->client, 0x0014, buf, 16);
- - msg[0].addr = ts->client->addr;
- - msg[0].flags = 0;
- - msg[0].len = 1;
- - msg[0].buf = &start_reg;
- - start_reg = 0x00;
- - msg[1].addr = ts->client->addr;
- - msg[1].flags = I2C_M_RD;
- - msg[1].len = sizeof(buf);
- - msg[1].buf = buf;
- -
- - /* printk("synaptics_ts_work_func\n"); */
- - for (i = 0; i < ((ts->use_irq && !bad_data) ? 1 : 10); i++) {
- - ret = i2c_transfer(ts->client->adapter, msg, 2);
- - if (ret < 0) {
- - printk(KERN_ERR "synaptics_ts_work_func: i2c_transfer failed\n");
- - bad_data = 1;
- - } else {
- - /* printk("synaptics_ts_work_func: %x %x %x %x %x %x" */
- - /* " %x %x %x %x %x %x %x %x %x, ret %d\n", */
- - /* buf[0], buf[1], buf[2], buf[3], */
- - /* buf[4], buf[5], buf[6], buf[7], */
- - /* buf[8], buf[9], buf[10], buf[11], */
- - /* buf[12], buf[13], buf[14], ret); */
- - if ((buf[14] & 0xc0) != 0x40) {
- - printk(KERN_WARNING "synaptics_ts_work_func:"
- - " bad read %x %x %x %x %x %x %x %x %x"
- - " %x %x %x %x %x %x, ret %d\n",
- - buf[0], buf[1], buf[2], buf[3],
- - buf[4], buf[5], buf[6], buf[7],
- - buf[8], buf[9], buf[10], buf[11],
- - buf[12], buf[13], buf[14], ret);
- - if (bad_data)
- - synaptics_init_panel(ts);
- - bad_data = 1;
- - continue;
- - }
- - bad_data = 0;
- - if ((buf[14] & 1) == 0) {
- - /* printk("read %d coordinates\n", i); */
- - break;
- - } else {
- - int pos[2][2];
- - int f, a;
- - int base;
- - /* int x = buf[3] | (uint16_t)(buf[2] & 0x1f) << 8; */
- - /* int y = buf[5] | (uint16_t)(buf[4] & 0x1f) << 8; */
- - int z = buf[1];
- - int w = buf[0] >> 4;
- - int finger = buf[0] & 7;
- -
- - /* int x2 = buf[3+6] | (uint16_t)(buf[2+6] & 0x1f) << 8; */
- - /* int y2 = buf[5+6] | (uint16_t)(buf[4+6] & 0x1f) << 8; */
- - /* int z2 = buf[1+6]; */
- - /* int w2 = buf[0+6] >> 4; */
- - /* int finger2 = buf[0+6] & 7; */
- -
- - /* int dx = (int8_t)buf[12]; */
- - /* int dy = (int8_t)buf[13]; */
- - int finger2_pressed;
- -
- - /* printk("x %4d, y %4d, z %3d, w %2d, F %d, 2nd: x %4d, y %4d, z %3d, w %2d, F %d, dx %4d, dy %4d\n", */
- - /* x, y, z, w, finger, */
- - /* x2, y2, z2, w2, finger2, */
- - /* dx, dy); */
- -
- - base = 2;
- - for (f = 0; f < 2; f++) {
- - uint32_t flip_flag = SYNAPTICS_FLIP_X;
- - for (a = 0; a < 2; a++) {
- - int p = buf[base + 1];
- - p |= (uint16_t)(buf[base] & 0x1f) << 8;
- - if (ts->flags & flip_flag)
- - p = ts->max[a] - p;
- - if (ts->flags & SYNAPTICS_SNAP_TO_INACTIVE_EDGE) {
- - if (ts->snap_state[f][a]) {
- - if (p <= ts->snap_down_off[a])
- - p = ts->snap_down[a];
- - else if (p >= ts->snap_up_off[a])
- - p = ts->snap_up[a];
- - else
- - ts->snap_state[f][a] = 0;
- - } else {
- - if (p <= ts->snap_down_on[a]) {
- - p = ts->snap_down[a];
- - ts->snap_state[f][a] = 1;
- - } else if (p >= ts->snap_up_on[a]) {
- - p = ts->snap_up[a];
- - ts->snap_state[f][a] = 1;
- - }
- - }
- - }
- - pos[f][a] = p;
- - base += 2;
- - flip_flag <<= 1;
- - }
- - base += 2;
- - if (ts->flags & SYNAPTICS_SWAP_XY)
- - swap(pos[f][0], pos[f][1]);
- - }
- - if (z) {
- - input_report_abs(ts->input_dev, ABS_X, pos[0][0]);
- - input_report_abs(ts->input_dev, ABS_Y, pos[0][1]);
- - }
- - input_report_abs(ts->input_dev, ABS_PRESSURE, z);
- - input_report_abs(ts->input_dev, ABS_TOOL_WIDTH, w);
- - input_report_key(ts->input_dev, BTN_TOUCH, finger);
- - finger2_pressed = finger > 1 && finger != 7;
- - input_report_key(ts->input_dev, BTN_2, finger2_pressed);
- - if (finger2_pressed) {
- - input_report_abs(ts->input_dev, ABS_HAT0X, pos[1][0]);
- - input_report_abs(ts->input_dev, ABS_HAT0Y, pos[1][1]);
- - }
- - input_sync(ts->input_dev);
- - }
- + if (ret < 0)
- + {
- + printk(KERN_ERR "synaptics_ts_work_func: i2c_transfer failed\n");
- + }
- + else
- + {
- +
- + x = (uint16_t) buf[2] << 4| (buf[4] & 0x0f) ;
- + y = (uint16_t) buf[3] << 4| ((buf[4] & 0xf0) >> 4);
- + pressure = buf[6];
- + w = buf[5] >> 4;
- + z = buf[5]&0x0f;
- + finger = buf[1] & 0x3;
- +
- + x2 = (uint16_t) buf[7] << 4| (buf[9] & 0x0f) ;
- + y2 = (uint16_t) buf[8] << 4| ((buf[9] & 0xf0) >> 4);
- + pressure2 = buf[11];
- + w2 = buf[10] >> 4;
- + z2 = buf[10] & 0x0f;
- + finger2 = buf[1] & 0xc;
- + #ifdef CONFIG_MACH_JOE//ZTE_TS_ZT_20100520_001
- + y = 2787 - y;
- + y2 = 2787 - y2;
- + #endif
- + if(finger)
- + {
- + input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, pressure);
- + input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x);
- + input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y);
- + input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w);
- + input_mt_sync(ts->input_dev);
- + }
- + if(finger2)
- +
- + {
- + input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, pressure2);
- + input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x2);
- + input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y2);
- + input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w2);
- + input_mt_sync(ts->input_dev);
- }
- + input_sync(ts->input_dev);
- + input_report_key(ts->input_dev, BTN_TOUCH, !!finger);
- + input_sync(ts->input_dev);
- +
- }
- + #ifdef POLL_IN_INT
- + if(finger)
- + {
- + hrtimer_start(&ts->timer, ktime_set(0, polling_time), HRTIMER_MODE_REL);
- + }
- + else
- + {
- + hrtimer_cancel(&ts->timer);
- + enable_irq(ts->client->irq);
- + }
- + #else
- if (ts->use_irq)
- enable_irq(ts->client->irq);
- + #endif
- }
- static enum hrtimer_restart synaptics_ts_timer_func(struct hrtimer *timer)
- @@ -212,8 +207,24 @@
- /* printk("synaptics_ts_timer_func\n"); */
- queue_work(synaptics_wq, &ts->work);
- + #ifndef POLL_IN_INT
- + hrtimer_start(&ts->timer, ktime_set(0, polling_time), HRTIMER_MODE_REL);
- + #endif
- + return HRTIMER_NORESTART;
- +}
- +static enum hrtimer_restart synaptics_ts_resume_func(struct hrtimer *timer)
- +{
- +
- + #if 0
- + struct synaptics_ts_data *ts = container_of(timer, struct synaptics_ts_data, resume_timer);
- + if (ts->use_irq)
- + enable_irq(ts->client->irq);
- + synaptics_i2c_write(ts->client, 0x0026, 0x07); /* enable abs int */
- + synaptics_i2c_write(ts->client, 0x0031, 0x7F);
- + #else
- + printk("synaptics_ts_resume_func\n");
- + #endif
- - hrtimer_start(&ts->timer, ktime_set(0, 12500000), HRTIMER_MODE_REL);
- return HRTIMER_NORESTART;
- }
- @@ -222,8 +233,12 @@
- struct synaptics_ts_data *ts = dev_id;
- /* printk("synaptics_ts_irq_handler\n"); */
- - disable_irq(ts->client->irq);
- + disable_irq_nosync(ts->client->irq);
- + #ifdef POLL_IN_INT
- + hrtimer_start(&ts->timer, ktime_set(0, 0), HRTIMER_MODE_REL);
- + #else
- queue_work(synaptics_wq, &ts->work);
- + #endif
- return IRQ_HANDLED;
- }
- @@ -231,28 +246,15 @@
- struct i2c_client *client, const struct i2c_device_id *id)
- {
- struct synaptics_ts_data *ts;
- - uint8_t buf0[4];
- - uint8_t buf1[8];
- - struct i2c_msg msg[2];
- + uint8_t buf1[9];
- + //struct i2c_msg msg[2];
- int ret = 0;
- uint16_t max_x, max_y;
- - int fuzz_x, fuzz_y, fuzz_p, fuzz_w;
- - struct synaptics_i2c_rmi_platform_data *pdata;
- - int inactive_area_left;
- - int inactive_area_right;
- - int inactive_area_top;
- - int inactive_area_bottom;
- - int snap_left_on;
- - int snap_left_off;
- - int snap_right_on;
- - int snap_right_off;
- - int snap_top_on;
- - int snap_top_off;
- - int snap_bottom_on;
- - int snap_bottom_off;
- - uint32_t panel_version;
- -
- - if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- + struct proc_dir_entry *refresh;
- + gpio_direction_output(GPIO_TOUCH_EN_OUT, 1);
- + msleep(250);
- + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
- + {
- printk(KERN_ERR "synaptics_ts_probe: need I2C_FUNC_I2C\n");
- ret = -ENODEV;
- goto err_check_functionality_failed;
- @@ -257,9 +259,9 @@
- ret = -ENODEV;
- goto err_check_functionality_failed;
- }
- -
- ts = kzalloc(sizeof(*ts), GFP_KERNEL);
- - if (ts == NULL) {
- + if (ts == NULL)
- + {
- ret = -ENOMEM;
- goto err_alloc_data_failed;
- }
- @@ -266,155 +269,45 @@
- INIT_WORK(&ts->work, synaptics_ts_work_func);
- ts->client = client;
- i2c_set_clientdata(client, ts);
- - pdata = client->dev.platform_data;
- - if (pdata)
- - ts->power = pdata->power;
- - if (ts->power) {
- - ret = ts->power(1);
- - if (ret < 0) {
- - printk(KERN_ERR "synaptics_ts_probe power on failed\n");
- - goto err_power_failed;
- - }
- - }
- -
- - ret = i2c_smbus_write_byte_data(ts->client, 0xf4, 0x01); /* device command = reset */
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_write_byte_data failed\n");
- - /* fail? */
- - }
- + client->driver = &synaptics_ts_driver;
- {
- - int retry = 10;
- - while (retry-- > 0) {
- - ret = i2c_smbus_read_byte_data(ts->client, 0xe4);
- + int retry = 3;
- + while (retry-- > 0)
- + {
- +
- + ret = synaptics_i2c_read(ts->client, 0x0078, buf1, 9);
- + printk("wly: synaptics_i2c_read, %c, %d,%d,%d,%d,%d,%d,%d,%d\n",
- + buf1[0],buf1[1],buf1[2],buf1[3],buf1[4],buf1[5],buf1[6],buf1[7],buf1[8]);
- if (ret >= 0)
- break;
- - msleep(100);
- - }
- - }
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_byte_data failed\n");
- - goto err_detect_failed;
- - }
- - printk(KERN_INFO "synaptics_ts_probe: Product Major Version %x\n", ret);
- - panel_version = ret << 8;
- - ret = i2c_smbus_read_byte_data(ts->client, 0xe5);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_byte_data failed\n");
- - goto err_detect_failed;
- - }
- - printk(KERN_INFO "synaptics_ts_probe: Product Minor Version %x\n", ret);
- - panel_version |= ret;
- + msleep(10);
- - ret = i2c_smbus_read_byte_data(ts->client, 0xe3);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_byte_data failed\n");
- - goto err_detect_failed;
- }
- - printk(KERN_INFO "synaptics_ts_probe: product property %x\n", ret);
- -
- - if (pdata) {
- - while (pdata->version > panel_version)
- - pdata++;
- - ts->flags = pdata->flags;
- - inactive_area_left = pdata->inactive_left;
- - inactive_area_right = pdata->inactive_right;
- - inactive_area_top = pdata->inactive_top;
- - inactive_area_bottom = pdata->inactive_bottom;
- - snap_left_on = pdata->snap_left_on;
- - snap_left_off = pdata->snap_left_off;
- - snap_right_on = pdata->snap_right_on;
- - snap_right_off = pdata->snap_right_off;
- - snap_top_on = pdata->snap_top_on;
- - snap_top_off = pdata->snap_top_off;
- - snap_bottom_on = pdata->snap_bottom_on;
- - snap_bottom_off = pdata->snap_bottom_off;
- - fuzz_x = pdata->fuzz_x;
- - fuzz_y = pdata->fuzz_y;
- - fuzz_p = pdata->fuzz_p;
- - fuzz_w = pdata->fuzz_w;
- - } else {
- - inactive_area_left = 0;
- - inactive_area_right = 0;
- - inactive_area_top = 0;
- - inactive_area_bottom = 0;
- - snap_left_on = 0;
- - snap_left_off = 0;
- - snap_right_on = 0;
- - snap_right_off = 0;
- - snap_top_on = 0;
- - snap_top_off = 0;
- - snap_bottom_on = 0;
- - snap_bottom_off = 0;
- - fuzz_x = 0;
- - fuzz_y = 0;
- - fuzz_p = 0;
- - fuzz_w = 0;
- - }
- -
- - ret = i2c_smbus_read_byte_data(ts->client, 0xf0);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_byte_data failed\n");
- + if (retry < 0)
- + {
- + ret = -1;
- goto err_detect_failed;
- }
- - printk(KERN_INFO "synaptics_ts_probe: device control %x\n", ret);
- -
- - ret = i2c_smbus_read_byte_data(ts->client, 0xf1);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_byte_data failed\n");
- - goto err_detect_failed;
- - }
- - printk(KERN_INFO "synaptics_ts_probe: interrupt enable %x\n", ret);
- -
- - ret = i2c_smbus_write_byte_data(ts->client, 0xf1, 0); /* disable interrupt */
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_write_byte_data failed\n");
- - goto err_detect_failed;
- - }
- -
- - msg[0].addr = ts->client->addr;
- - msg[0].flags = 0;
- - msg[0].len = 1;
- - msg[0].buf = buf0;
- - buf0[0] = 0xe0;
- - msg[1].addr = ts->client->addr;
- - msg[1].flags = I2C_M_RD;
- - msg[1].len = 8;
- - msg[1].buf = buf1;
- - ret = i2c_transfer(ts->client->adapter, msg, 2);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_transfer failed\n");
- - goto err_detect_failed;
- - }
- - printk(KERN_INFO "synaptics_ts_probe: 0xe0: %x %x %x %x %x %x %x %x\n",
- - buf1[0], buf1[1], buf1[2], buf1[3],
- - buf1[4], buf1[5], buf1[6], buf1[7]);
- -
- - ret = i2c_smbus_write_byte_data(ts->client, 0xff, 0x10); /* page select = 0x10 */
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_write_byte_data failed for page select\n");
- - goto err_detect_failed;
- }
- - ret = i2c_smbus_read_word_data(ts->client, 0x04);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_word_data failed\n");
- + ret = synaptics_i2c_write(ts->client, 0x0025, 0x00);
- + ret = synaptics_i2c_read(ts->client, 0x002D, buf1, 2);
- + if (ret < 0)
- + {
- + printk(KERN_ERR "synaptics_i2c_read failed\n");
- goto err_detect_failed;
- }
- - ts->max[0] = max_x = (ret >> 8 & 0xff) | ((ret & 0x1f) << 8);
- - ret = i2c_smbus_read_word_data(ts->client, 0x06);
- - if (ret < 0) {
- - printk(KERN_ERR "i2c_smbus_read_word_data failed\n");
- + ts->max[0] = max_x = buf1[0] | ((buf1[1] & 0x0f) << 8);
- + ret = synaptics_i2c_read(ts->client, 0x002F, buf1, 2);
- + if (ret < 0)
- + {
- + printk(KERN_ERR "synaptics_i2c_read failed\n");
- goto err_detect_failed;
- }
- - ts->max[1] = max_y = (ret >> 8 & 0xff) | ((ret & 0x1f) << 8);
- - if (ts->flags & SYNAPTICS_SWAP_XY)
- - swap(max_x, max_y);
- -
- - ret = synaptics_init_panel(ts); /* will also switch back to page 0x04 */
- - if (ret < 0) {
- - printk(KERN_ERR "synaptics_init_panel failed\n");
- - goto err_detect_failed;
- - }
- -
- + ts->max[1] = max_y = buf1[0] | ((buf1[1] & 0x0f) << 8);
- + printk("wly: synaptics_ts_probe,max_x=%d, max_y=%d\n", max_x, max_y);
- +#if defined(CONFIG_MACH_R750)
- + max_y = 2739;
- +#endif
- ts->input_dev = input_allocate_device();
- if (ts->input_dev == NULL) {
- ret = -ENOMEM;
- @@ -422,60 +315,49 @@
- goto err_input_dev_alloc_failed;
- }
- ts->input_dev->name = "synaptics-rmi-touchscreen";
- + ts->input_dev->phys = "synaptics-rmi-touchscreen/input0";
- +
- set_bit(EV_SYN, ts->input_dev->evbit);
- set_bit(EV_KEY, ts->input_dev->evbit);
- set_bit(BTN_TOUCH, ts->input_dev->keybit);
- - set_bit(BTN_2, ts->input_dev->keybit);
- set_bit(EV_ABS, ts->input_dev->evbit);
- - inactive_area_left = inactive_area_left * max_x / 0x10000;
- - inactive_area_right = inactive_area_right * max_x / 0x10000;
- - inactive_area_top = inactive_area_top * max_y / 0x10000;
- - inactive_area_bottom = inactive_area_bottom * max_y / 0x10000;
- - snap_left_on = snap_left_on * max_x / 0x10000;
- - snap_left_off = snap_left_off * max_x / 0x10000;
- - snap_right_on = snap_right_on * max_x / 0x10000;
- - snap_right_off = snap_right_off * max_x / 0x10000;
- - snap_top_on = snap_top_on * max_y / 0x10000;
- - snap_top_off = snap_top_off * max_y / 0x10000;
- - snap_bottom_on = snap_bottom_on * max_y / 0x10000;
- - snap_bottom_off = snap_bottom_off * max_y / 0x10000;
- - fuzz_x = fuzz_x * max_x / 0x10000;
- - fuzz_y = fuzz_y * max_y / 0x10000;
- - ts->snap_down[!!(ts->flags & SYNAPTICS_SWAP_XY)] = -inactive_area_left;
- - ts->snap_up[!!(ts->flags & SYNAPTICS_SWAP_XY)] = max_x + inactive_area_right;
- - ts->snap_down[!(ts->flags & SYNAPTICS_SWAP_XY)] = -inactive_area_top;
- - ts->snap_up[!(ts->flags & SYNAPTICS_SWAP_XY)] = max_y + inactive_area_bottom;
- - ts->snap_down_on[!!(ts->flags & SYNAPTICS_SWAP_XY)] = snap_left_on;
- - ts->snap_down_off[!!(ts->flags & SYNAPTICS_SWAP_XY)] = snap_left_off;
- - ts->snap_up_on[!!(ts->flags & SYNAPTICS_SWAP_XY)] = max_x - snap_right_on;
- - ts->snap_up_off[!!(ts->flags & SYNAPTICS_SWAP_XY)] = max_x - snap_right_off;
- - ts->snap_down_on[!(ts->flags & SYNAPTICS_SWAP_XY)] = snap_top_on;
- - ts->snap_down_off[!(ts->flags & SYNAPTICS_SWAP_XY)] = snap_top_off;
- - ts->snap_up_on[!(ts->flags & SYNAPTICS_SWAP_XY)] = max_y - snap_bottom_on;
- - ts->snap_up_off[!(ts->flags & SYNAPTICS_SWAP_XY)] = max_y - snap_bottom_off;
- - printk(KERN_INFO "synaptics_ts_probe: max_x %d, max_y %d\n", max_x, max_y);
- - printk(KERN_INFO "synaptics_ts_probe: inactive_x %d %d, inactive_y %d %d\n",
- - inactive_area_left, inactive_area_right,
- - inactive_area_top, inactive_area_bottom);
- - printk(KERN_INFO "synaptics_ts_probe: snap_x %d-%d %d-%d, snap_y %d-%d %d-%d\n",
- - snap_left_on, snap_left_off, snap_right_on, snap_right_off,
- - snap_top_on, snap_top_off, snap_bottom_on, snap_bottom_off);
- - input_set_abs_params(ts->input_dev, ABS_X, -inactive_area_left, max_x + inactive_area_right, fuzz_x, 0);
- - input_set_abs_params(ts->input_dev, ABS_Y, -inactive_area_top, max_y + inactive_area_bottom, fuzz_y, 0);
- - input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 255, fuzz_p, 0);
- - input_set_abs_params(ts->input_dev, ABS_TOOL_WIDTH, 0, 15, fuzz_w, 0);
- - input_set_abs_params(ts->input_dev, ABS_HAT0X, -inactive_area_left, max_x + inactive_area_right, fuzz_x, 0);
- - input_set_abs_params(ts->input_dev, ABS_HAT0Y, -inactive_area_top, max_y + inactive_area_bottom, fuzz_y, 0);
- - /* ts->input_dev->name = ts->keypad_info->name; */
- + set_bit(ABS_MT_TOUCH_MAJOR, ts->input_dev->absbit);
- + set_bit(ABS_MT_POSITION_X, ts->input_dev->absbit);
- + set_bit(ABS_MT_POSITION_Y, ts->input_dev->absbit);
- + set_bit(ABS_MT_WIDTH_MAJOR, ts->input_dev->absbit);
- +
- + input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
- + input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, max_x, 0, 0);
- + input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, max_y, 0, 0);
- + input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
- ret = input_register_device(ts->input_dev);
- - if (ret) {
- + if (ret)
- + {
- printk(KERN_ERR "synaptics_ts_probe: Unable to register %s input device\n", ts->input_dev->name);
- goto err_input_register_device_failed;
- }
- - if (client->irq) {
- - ret = request_irq(client->irq, synaptics_ts_irq_handler, 0, client->name, ts);
- + hrtimer_init(&ts->resume_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
- + ts->resume_timer.function = synaptics_ts_resume_func;
- + #ifdef POLL_IN_INT
- + hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
- + ts->timer.function = synaptics_ts_timer_func;
- + ret = request_irq(client->irq, synaptics_ts_irq_handler, IRQF_TRIGGER_LOW, "synaptics_touch", ts);
- + if(ret == 0)
- + {
- + ret = synaptics_i2c_write(ts->client, 0x0026, 0x07);
- + if (ret)
- + free_irq(client->irq, ts);
- + }
- + if(ret == 0)
- + ts->use_irq = 1;
- + else
- + dev_err(&client->dev, "request_irq failed\n");
- + #else
- + if (0)
- + {
- + ret = request_irq(client->irq, synaptics_ts_irq_handler, IRQF_TRIGGER_LOW, "synaptics_touch", ts);
- if (ret == 0) {
- - ret = i2c_smbus_write_byte_data(ts->client, 0xf1, 0x01); /* enable abs int */
- + ret = synaptics_i2c_write(ts->client, 0x0026, 0x07); /* enable abs int */
- if (ret)
- free_irq(client->irq, ts);
- }
- @@ -484,18 +366,26 @@
- else
- dev_err(&client->dev, "request_irq failed\n");
- }
- - if (!ts->use_irq) {
- + ts->use_irq = 0;
- + if (!ts->use_irq)
- + {
- hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
- ts->timer.function = synaptics_ts_timer_func;
- hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL);
- }
- + #endif
- #ifdef CONFIG_HAS_EARLYSUSPEND
- ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
- ts->early_suspend.suspend = synaptics_ts_early_suspend;
- ts->early_suspend.resume = synaptics_ts_late_resume;
- register_early_suspend(&ts->early_suspend);
- #endif
- -
- + refresh = create_proc_entry("ts_poll_freq", 0644, NULL);
- + if (refresh) {
- + refresh->data = NULL;
- + refresh->read_proc = proc_read_val;
- + refresh->write_proc = proc_write_val;
- + }
- printk(KERN_INFO "synaptics_ts_probe: Start touchscreen %s in %s mode\n", ts->input_dev->name, ts->use_irq ? "interrupt" : "polling");
- return 0;
- @@ -505,7 +395,6 @@
- err_input_dev_alloc_failed:
- err_detect_failed:
- -err_power_failed:
- kfree(ts);
- err_alloc_data_failed:
- err_check_functionality_failed:
- @@ -522,6 +411,7 @@
- hrtimer_cancel(&ts->timer);
- input_unregister_device(ts->input_dev);
- kfree(ts);
- + gpio_direction_output(GPIO_TOUCH_EN_OUT, 0);
- return 0;
- }
- @@ -537,18 +427,14 @@
- ret = cancel_work_sync(&ts->work);
- if (ret && ts->use_irq) /* if work was pending disable-count is now 2 */
- enable_irq(client->irq);
- - ret = i2c_smbus_write_byte_data(ts->client, 0xf1, 0); /* disable interrupt */
- + ret = synaptics_i2c_write(ts->client, 0x0026, 0); /* disable interrupt */
- if (ret < 0)
- - printk(KERN_ERR "synaptics_ts_suspend: i2c_smbus_write_byte_data failed\n");
- + printk(KERN_ERR "synaptics_ts_suspend: synaptics_i2c_write failed\n");
- - ret = i2c_smbus_write_byte_data(client, 0xf0, 0x86); /* deep sleep */
- + ret = synaptics_i2c_write(client, 0x0025, 0x01); /* deep sleep */
- if (ret < 0)
- - printk(KERN_ERR "synaptics_ts_suspend: i2c_smbus_write_byte_data failed\n");
- - if (ts->power) {
- - ret = ts->power(0);
- - if (ret < 0)
- - printk(KERN_ERR "synaptics_ts_resume power off failed\n");
- - }
- + printk(KERN_ERR "synaptics_ts_suspend: synaptics_i2c_write failed\n");
- +
- return 0;
- }
- @@ -556,23 +442,21 @@
- {
- int ret;
- struct synaptics_ts_data *ts = i2c_get_clientdata(client);
- -
- - if (ts->power) {
- - ret = ts->power(1);
- - if (ret < 0)
- - printk(KERN_ERR "synaptics_ts_resume power on failed\n");
- - }
- -
- - synaptics_init_panel(ts);
- -
- + gpio_direction_output(GPIO_TOUCH_EN_OUT, 1);
- + ret = synaptics_i2c_write(ts->client, 0x0025, 0x00);
- + hrtimer_start(&ts->resume_timer, ktime_set(0, 5000000), HRTIMER_MODE_REL);
- + #if 1
- if (ts->use_irq)
- enable_irq(client->irq);
- if (!ts->use_irq)
- hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL);
- else
- - i2c_smbus_write_byte_data(ts->client, 0xf1, 0x01); /* enable abs int */
- -
- + {
- + synaptics_i2c_write(ts->client, 0x0026, 0x07);
- + synaptics_i2c_write(ts->client, 0x0031, 0x7F);
- + }
- + #endif
- return 0;
- }
- diff -urB -x .git msm/drivers/leds/Makefile zte/drivers/leds/Makefile
- --- msm/drivers/leds/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/leds/Makefile Sat Oct 16 11:46:40 2010
- @@ -23,7 +23,10 @@
- obj-$(CONFIG_LEDS_HP6XX) += leds-hp6xx.o
- obj-$(CONFIG_LEDS_FSG) += leds-fsg.o
- obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o
- -obj-$(CONFIG_LEDS_MSM_PMIC) += leds-msm-pmic.o
- +#support led blink based on msm-pmic-led drivers, -->
- +# obj-$(CONFIG_LEDS_MSM_PMIC) += leds-msm-pmic.o
- +obj-$(CONFIG_LEDS_MSM_PMIC) += leds-msm-pmic-status.o
- +#support led blink based on msm-pmic-led drivers , <--
- obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o
- obj-$(CONFIG_LEDS_WM8350) += leds-wm8350.o
- diff -urB -x .git msm/drivers/leds/leds-cpld.c zte/drivers/leds/leds-cpld.c
- --- msm/drivers/leds/leds-cpld.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/leds/leds-cpld.c Wed Oct 13 18:14:56 2010
- @@ -26,6 +26,8 @@
- #include <linux/io.h>
- #include <asm/mach-types.h>
- +#define DEBUG_LED_CHANGE 0
- +
- static int _g_cpld_led_addr;
- struct CPLD_LED_data {
- @@ -193,8 +195,10 @@
- reg_val = brightness;
- writeb(0, _g_cpld_led_addr + 0x8);
- writeb(reg_val, _g_cpld_led_addr + 0x8);
- +#if DEBUG_LED_CHANGE
- printk(KERN_INFO "LED change: jogball backlight = %d \n",
- reg_val);
- +#endif
- return;
- } else if (!strcmp(led_cdev->name, "red")) {
- idx = 0;
- @@ -215,9 +219,9 @@
- reg_val &= ~(1 << (2 * idx));
- writeb(reg_val, _g_cpld_led_addr);
- - reg_val = led->brightness / 2;
- - writeb(reg_val, _g_cpld_led_addr + 2 * (idx + 1));
- - printk(KERN_INFO "LED change: %s = %d \n", led_cdev->name, reg_val);
- +#if DEBUG_LED_CHANGE
- + printk(KERN_INFO "LED change: %s = %d \n", led_cdev->name, led->brightness);
- +#endif
- spin_unlock(&CPLD_LED->data_lock);
- }
- @@ -279,9 +283,6 @@
- memset(CPLD_LED, 0, sizeof(struct CPLD_LED_data));
- writeb(0x00, _g_cpld_led_addr);
- - writeb(0x00, _g_cpld_led_addr + 0x02);
- - writeb(0x00, _g_cpld_led_addr + 0x04);
- - writeb(0x00, _g_cpld_led_addr + 0x06);
- CPLD_LED->leds[0].name = "red";
- CPLD_LED->leds[0].brightness_set = led_brightness_set;
- Only in zte/drivers/leds: leds-msm-pmic-status.c
- diff -urB -x .git msm/drivers/media/video/msm/Kconfig zte/drivers/media/video/msm/Kconfig
- --- msm/drivers/media/video/msm/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/drivers/media/video/msm/Kconfig Fri Oct 29 16:55:34 2010
- @@ -2,14 +2,14 @@
- config MT9T013
- bool "Sensor mt9t013 (BAYER 3M)"
- depends on MSM_CAMERA
- - default y
- + default n
- ---help---
- MICRON 3M Bayer Sensor with AutoFocus
- config MT9D112
- bool "Sensor mt9d112 (YUV 2M)"
- depends on MSM_CAMERA
- - default y
- + default n
- ---help---
- MICRON 2M YUV Sensor
- config VX6953
- @@ -22,10 +22,34 @@
- config MT9P012
- bool "Sensor mt9p012 (BAYER 5M)"
- depends on MSM_CAMERA
- - default y
- + default n
- ---help---
- MICRON 5M Bayer Sensor with Autofocus
- -
- +
- +config MT9V113
- + bool "Sensor mt9v113 (YUV 0.3M)"
- + depends on MSM_CAMERA
- + default n
- + ---help---
- + APTINA 0.3M YUV Sensor
- +
- +config MT9T11X
- + bool "Sensor mt9t111 or mt9t112 (YUV 3.1M)"
- + depends on MSM_CAMERA
- + default y
- + ---help---
- + APTINA 3.1M YUV Sensor
- +
- +if MT9T11X
- +config MT9T11X_QTECH_MCNEX_FPC
- + bool "Sensor mt9t111 or mt9t112 (YUV 3.1M)"
- + depends on MSM_CAMERA
- + depends on MACH_BLADE || MACH_SMOOTH || MACH_RAISE
- + default y
- + ---help---
- + APTINA 3.1M YUV Sensor
- +endif # MT9T11X
- +
- choice
- prompt "AF module"
- depends on MT9P012
- @@ -46,14 +70,14 @@
- config MT9P012_KM
- bool "Sensor mt9p012 KM module (BAYER 5M)"
- depends on MSM_CAMERA
- - default y
- + default n
- ---help---
- MICRON 5M Bayer Sensor KM modules with Autofocus
- config S5K3E2FX
- bool "Sensor s5k3e2fx (Samsung 5M)"
- depends on MSM_CAMERA
- - default y
- + default n
- ---help---
- Samsung 5M with Autofocus
- @@ -62,11 +86,11 @@
- depends on MSM_CAMERA
- ---help---
- 5M with flash
- -
- +
- config MSM_CAMERA_FLASH
- bool "Qualcomm MSM camera flash support"
- depends on MSM_CAMERA
- - default y
- + default n
- ---help---
- Enable support for LED flash for msm camera
- Only in zte/drivers/media/video/msm: Kconfig.bak
- diff -urB -x .git msm/drivers/media/video/msm/Makefile zte/drivers/media/video/msm/Makefile
- --- msm/drivers/media/video/msm/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/media/video/msm/Makefile Thu Oct 28 15:28:00 2010
- @@ -10,6 +10,8 @@
- obj-$(CONFIG_ARCH_QSD8X50) += msm_vfe8x.o msm_vfe8x_proc.o msm_io8x.o
- obj-$(CONFIG_MT9T013) += mt9t013.o mt9t013_reg.o
- obj-$(CONFIG_MT9D112) += mt9d112.o mt9d112_reg.o
- +obj-$(CONFIG_MT9V113) += mt9v113.o mt9v113_reg.o
- +obj-$(CONFIG_MT9T11X_QTECH_MCNEX_FPC) += mt9t11x.o mt9t112_reg.o mt9t111_reg.o
- obj-$(CONFIG_MT9P012) += mt9p012_reg.o
- obj-$(CONFIG_MSM_CAMERA_AF_FOXCONN) += mt9p012_fox.o
- obj-$(CONFIG_MSM_CAMERA_AF_BAM) += mt9p012_bam.o
- Only in zte/drivers/media/video/msm: mt9t111_reg.c
- Only in zte/drivers/media/video/msm: mt9t112_reg.c
- Only in zte/drivers/media/video/msm: mt9t11x.c
- Only in zte/drivers/media/video/msm: mt9t11x.h
- Only in zte/drivers/media/video/msm: mt9v113.c
- Only in zte/drivers/media/video/msm: mt9v113.h
- Only in zte/drivers/media/video/msm: mt9v113_reg.c
- diff -urB -x .git msm/drivers/misc/Kconfig zte/drivers/misc/Kconfig
- --- msm/drivers/misc/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/drivers/misc/Kconfig Mon Oct 25 15:33:20 2010
- @@ -17,6 +17,9 @@
- bool "Android pmem allocator"
- default y
- +config FM_SI4708
- + bool "Android fm semiconductor si470x from silicon libraries"
- + default y
- config ANDROID_PMEM_DEBUG
- bool "Android pmem debug"
- depends on ANDROID_PMEM
- @@ -287,5 +290,7 @@
- source "drivers/misc/c2port/Kconfig"
- source "drivers/misc/eeprom/Kconfig"
- source "drivers/misc/video_core/720p/Kconfig"
- +
- +#source "drivers/misc/modemctl/Kconfig"
- endif # MISC_DEVICES
- Only in zte/drivers/misc: Kconfig.bak
- diff -urB -x .git msm/drivers/misc/Makefile zte/drivers/misc/Makefile
- --- msm/drivers/misc/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/misc/Makefile Mon Oct 18 09:53:16 2010
- @@ -21,6 +21,7 @@
- obj-$(CONFIG_SGI_XP) += sgi-xp/
- obj-$(CONFIG_SGI_GRU) += sgi-gru/
- obj-$(CONFIG_HP_ILO) += hpilo.o
- +obj-$(CONFIG_FM_SI4708) += fm_si4708.o
- obj-$(CONFIG_UID_STAT) += uid_stat.o
- obj-$(CONFIG_C2PORT) += c2port/
- obj-y += eeprom/
- @@ -30,4 +31,7 @@
- obj-$(CONFIG_TSIF_CHRDEV) += tsif_chrdev.o
- obj-$(CONFIG_PMIC8058_PWM) += pmic8058-pwm.o
- +
- +obj-$(CONFIG_MODEMCTL) += modemctl/
- +
- Only in zte/drivers/misc: fm_si4708.c
- diff -urB -x .git msm/drivers/mmc/card/block.c zte/drivers/mmc/card/block.c
- --- msm/drivers/mmc/card/block.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/card/block.c Thu Oct 28 11:55:28 2010
- @@ -608,12 +608,22 @@
- return err;
- }
- +
- +int remove_all_req(struct mmc_queue *mq);
- +
- static void mmc_blk_remove(struct mmc_card *card)
- {
- struct mmc_blk_data *md = mmc_get_drvdata(card);
- if (md) {
- /* Stop new requests from getting into the queue */
- + //ruanmeisi_20100603
- + printk(KERN_ERR"rms:%s %d\n", __FUNCTION__, __LINE__);
- + queue_flag_set_unlocked(QUEUE_FLAG_DEAD,
- + md->queue.queue);
- + remove_all_req(&md->queue);
- + //end
- +
- del_gendisk(md->disk);
- /* Then flush out any already in there */
- diff -urB -x .git msm/drivers/mmc/card/queue.c zte/drivers/mmc/card/queue.c
- --- msm/drivers/mmc/card/queue.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/card/queue.c Thu Oct 28 11:55:28 2010
- @@ -42,12 +42,39 @@
- return BLKPREP_OK;
- }
- -
- +//ruanmeisi_20100603
- +int mmc_send_status(struct mmc_card *card, u32 *status);
- +
- +int remove_all_req(struct mmc_queue *mq)
- +{
- + int i = 0;
- + struct request_queue *q = mq->queue;
- + struct request *req = NULL;
- + if (NULL == mq) {
- + return 0;
- + }
- + spin_lock_irq(q->queue_lock);
- + while ((req = elv_next_request(q)) != NULL) {
- + int ret = 0;
- + do {
- + req->cmd_flags |= REQ_QUIET;
- + ret = __blk_end_request(req, -EIO,
- + blk_rq_cur_bytes(req));
- + } while (ret);
- + i ++;
- + }
- + spin_unlock_irq(q->queue_lock);
- +
- + printk(KERN_ERR"rms:%s %d req %d\n", __FUNCTION__, __LINE__, i);
- + return i;
- +}
- static int mmc_queue_thread(void *d)
- {
- struct mmc_queue *mq = d;
- struct request_queue *q = mq->queue;
- struct request *req;
- + //ruanmeisi_20100603
- + int issue_ret = 0;
- current->flags |= PF_MEMALLOC;
- @@ -55,6 +82,12 @@
- do {
- req = NULL; /* Must be set to NULL at each iteration */
- + //ruanmeisi_20100603
- + if (kthread_should_stop()) {
- + remove_all_req(mq);
- + break;
- + }
- + //end
- spin_lock_irq(q->queue_lock);
- set_current_state(TASK_INTERRUPTIBLE);
- if (!blk_queue_plugged(q))
- @@ -106,7 +139,25 @@
- mq->check_status = 0;
- }
- #endif
- - mq->issue_fn(mq, req);
- +//ruanmeisi_20100529
- + issue_ret = mq->issue_fn(mq, req);
- + //ruanmeisi
- + if (0 == issue_ret) {
- + int err;
- + mmc_claim_host(mq->card->host);
- + err = mmc_send_status(mq->card, NULL);
- + mmc_release_host(mq->card->host);
- + if (err) {
- + printk(KERN_ERR "rms:%s: failed to get status (%d) maybe the card is removed\n",
- + __func__, err);
- + //sdcard is removed?
- + mmc_detect_change(mq->card->host, 0);
- + msleep(500);
- + //set_current_state(TASK_INTERRUPTIBLE);
- + //schedule_timeout(HZ / 2);
- + continue;
- + }
- + }
- } while (1);
- up(&mq->thread_sem);
- diff -urB -x .git msm/drivers/mmc/core/core.c zte/drivers/mmc/core/core.c
- --- msm/drivers/mmc/core/core.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/core/core.c Thu Oct 28 11:55:28 2010
- @@ -37,6 +37,10 @@
- #include "sd_ops.h"
- #include "sdio_ops.h"
- +/* ATHENV */
- +#define ATH_WIFI_SDCC_INDEX 1
- +/* ATHENV */
- +
- static struct workqueue_struct *workqueue;
- static struct wake_lock mmc_delayed_work_wake_lock;
- @@ -54,7 +58,9 @@
- static int mmc_schedule_delayed_work(struct delayed_work *work,
- unsigned long delay)
- {
- - wake_lock(&mmc_delayed_work_wake_lock);
- +//ruanmeisi_20100422
- + //wake_lock(&mmc_delayed_work_wake_lock);
- +//end
- return queue_delayed_work(workqueue, work, delay);
- }
- @@ -353,16 +359,33 @@
- while (1) {
- set_current_state(TASK_UNINTERRUPTIBLE);
- stop = abort ? atomic_read(abort) : 0;
- +/* ATHENV */
- +#if 0
- if (stop || !host->claimed)
- break;
- +#else
- + if (stop || !host->claimed || host->claimer == current)
- + break;
- +#endif
- +/* ATHENV */
- spin_unlock_irqrestore(&host->lock, flags);
- schedule();
- spin_lock_irqsave(&host->lock, flags);
- }
- set_current_state(TASK_RUNNING);
- +/* ATHENV */
- +#if 0
- if (!stop)
- host->claimed = 1;
- else
- +#else
- + if (!stop) {
- + host->claimed = 1;
- + host->claimer = current;
- + host->claim_cnt += 1;
- + } else
- +#endif
- +/* ATHENV */
- wake_up(&host->wq);
- spin_unlock_irqrestore(&host->lock, flags);
- remove_wait_queue(&host->wq, &wait);
- @@ -385,11 +408,24 @@
- WARN_ON(!host->claimed);
- spin_lock_irqsave(&host->lock, flags);
- +/* ATHENV */
- +#if 0
- host->claimed = 0;
- spin_unlock_irqrestore(&host->lock, flags);
- + wake_up(&host->wq)
- +#else
- + if (--host->claim_cnt) {
- + spin_unlock_irqrestore(&host->lock, flags);
- + } else {
- + host->claimed = 0;
- + host->claimer = NULL;
- + spin_unlock_irqrestore(&host->lock, flags);
- wake_up(&host->wq);
- }
- +#endif
- +/* ATHENV */
- +}
- EXPORT_SYMBOL(mmc_release_host);
- @@ -798,7 +834,9 @@
- container_of(work, struct mmc_host, detect.work);
- u32 ocr;
- int err;
- -
- + //ruanmeisi_20100422
- + wake_lock(&mmc_delayed_work_wake_lock);
- + //end
- mmc_bus_get(host);
- #ifdef CONFIG_MMC_AUTO_SUSPEND
- @@ -867,7 +905,7 @@
- wake_lock_timeout(&mmc_delayed_work_wake_lock, HZ / 2);
- if (host->caps & MMC_CAP_NEEDS_POLL)
- - mmc_schedule_delayed_work(&host->detect, HZ);
- + mmc_schedule_delayed_work(&host->detect, 2 * HZ);
- }
- void mmc_start_host(struct mmc_host *host)
- @@ -916,13 +954,18 @@
- */
- int mmc_suspend_host(struct mmc_host *host, pm_message_t state)
- {
- + int err = 0;
- cancel_delayed_work(&host->detect);
- #ifdef CONFIG_MMC_AUTO_SUSPEND
- cancel_delayed_work(&host->auto_suspend);
- #endif
- + pr_info("%s index = %d\n", __FUNCTION__, host->index);
- +
- mmc_flush_scheduled_work();
- mmc_bus_get(host);
- +/* ATHENV */
- +#if 0
- if (host->bus_ops && !host->bus_dead) {
- if (host->bus_ops->suspend)
- host->bus_ops->suspend(host);
- @@ -934,10 +977,39 @@
- mmc_detach_bus(host);
- mmc_release_host(host);
- }
- +#else
- + if (host->bus_ops && !host->bus_dead) {
- + if (host->bus_ops->suspend)
- + err = host->bus_ops->suspend(host);
- + if (err == -ENOSYS || !host->bus_ops->resume) {
- + /*
- + * We simply "remove" the card in this case.
- + * It will be redetected on resume.
- + */
- + if (host->bus_ops->remove)
- + host->bus_ops->remove(host);
- +
- + mmc_claim_host(host);
- + mmc_detach_bus(host);
- + mmc_release_host(host);
- + err = 0;
- + }
- +#endif
- +/* ATHENV */
- }
- mmc_bus_put(host);
- +/* ATHENV */
- +#if 0
- mmc_power_off(host);
- +
- return 0;
- +#else
- + if (!err)
- + mmc_power_off(host);
- + host->last_suspend_error = err;
- +
- + return err;
- +#endif
- }
- EXPORT_SYMBOL(mmc_suspend_host);
- @@ -948,21 +1020,54 @@
- */
- int mmc_resume_host(struct mmc_host *host)
- {
- +/* ATHENV */
- + int err = 0;
- +/* ATHENV */
- + pr_info("%s index = %d\n", __FUNCTION__, host->index);
- +
- mmc_bus_get(host);
- if (host->bus_ops && !host->bus_dead) {
- mmc_power_up(host);
- BUG_ON(!host->bus_ops->resume);
- +/* ATHENV */
- +#if 0
- host->bus_ops->resume(host);
- +#else
- + err = host->bus_ops->resume(host);
- + if (err) {
- + printk(KERN_WARNING "%s: error %d during resume "
- + "(card was removed?)\n",
- + mmc_hostname(host), err);
- + if (host->bus_ops->remove)
- + host->bus_ops->remove(host);
- + mmc_claim_host(host);
- + mmc_detach_bus(host);
- + mmc_release_host(host);
- + /* no need to bother upper layers */
- + err = 0;
- + }
- +#endif
- +/* ATHENV */
- }
- mmc_bus_put(host);
- -
- +/* ATHENV */
- + if (host->index == ATH_WIFI_SDCC_INDEX) {
- + pr_info("%s: mmc_resume_host in wifi slot skip cmd7\n", mmc_hostname(host));
- + return err;
- + }
- +/* ATHENV */
- /*
- * We add a slight delay here so that resume can progress
- * in parallel.
- */
- mmc_detect_change(host, 1);
- -
- +/* ATHENV */
- +#if 0
- return 0;
- +#else
- + return err;
- +#endif
- +/* ATHENV */
- }
- EXPORT_SYMBOL(mmc_resume_host);
- @@ -985,6 +1090,25 @@
- EXPORT_SYMBOL(mmc_set_embedded_sdio_data);
- #endif
- +//ruanmeisi_091224
- +void mmc_redetect_card(struct mmc_host *host)
- +{
- + printk(KERN_ERR"%s:line:%d %s\n", mmc_hostname(host), __LINE__, __FUNCTION__);
- + if (NULL == host) {
- + return ;
- + }
- + mmc_stop_host(host);
- + mmc_start_host(host);
- +}
- +
- +EXPORT_SYMBOL(mmc_redetect_card);
- +
- +int queue_redetect_work(struct work_struct *work)
- +{
- + return queue_work(workqueue, work);
- +}
- +EXPORT_SYMBOL(queue_redetect_work);
- +//end
- static int __init mmc_init(void)
- {
- int ret;
- diff -urB -x .git msm/drivers/mmc/core/core.h zte/drivers/mmc/core/core.h
- --- msm/drivers/mmc/core/core.h Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/core/core.h Thu Oct 28 11:55:28 2010
- @@ -18,8 +18,15 @@
- struct mmc_bus_ops {
- void (*remove)(struct mmc_host *);
- void (*detect)(struct mmc_host *);
- +/* ATHENV */
- +#if 0
- void (*suspend)(struct mmc_host *);
- void (*resume)(struct mmc_host *);
- +#else
- + int (*suspend)(struct mmc_host *);
- + int (*resume)(struct mmc_host *);
- +#endif
- +/* ATHENV */
- };
- void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops);
- diff -urB -x .git msm/drivers/mmc/core/mmc.c zte/drivers/mmc/core/mmc.c
- --- msm/drivers/mmc/core/mmc.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/core/mmc.c Thu Oct 28 11:55:28 2010
- @@ -512,7 +512,13 @@
- /*
- * Suspend callback from host.
- */
- +/* ATHENV */
- +#if 0
- static void mmc_suspend(struct mmc_host *host)
- +#else
- +static int mmc_suspend(struct mmc_host *host)
- +#endif
- +/* ATHENV */
- {
- BUG_ON(!host);
- BUG_ON(!host->card);
- @@ -522,6 +528,9 @@
- mmc_deselect_cards(host);
- host->card->state &= ~MMC_STATE_HIGHSPEED;
- mmc_release_host(host);
- +/* ATHENV */
- + return 0;
- +/* ATHENV */
- }
- /*
- @@ -530,7 +539,13 @@
- * This function tries to determine if the same card is still present
- * and, if so, restore all state to it.
- */
- +/* ATHENV */
- +#if 0
- static void mmc_resume(struct mmc_host *host)
- +#else
- +static int mmc_resume(struct mmc_host *host)
- +#endif
- +/* ATHENV */
- {
- int err;
- @@ -540,7 +555,8 @@
- mmc_claim_host(host);
- err = mmc_init_card(host, host->ocr, host->card);
- mmc_release_host(host);
- -
- +/* ATHENV */
- +#if 0
- if (err) {
- mmc_remove(host);
- @@ -548,7 +564,10 @@
- mmc_detach_bus(host);
- mmc_release_host(host);
- }
- -
- +#else
- + return err;
- +#endif
- +/* ATHENV */
- }
- #else
- diff -urB -x .git msm/drivers/mmc/core/sd.c zte/drivers/mmc/core/sd.c
- --- msm/drivers/mmc/core/sd.c Mon Nov 1 13:40:28 2010
- +++ zte/drivers/mmc/core/sd.c Thu Oct 28 11:55:28 2010
- @@ -601,7 +601,13 @@
- /*
- * Suspend callback from host.
- */
- +/* ATHENV */
- +#if 0
- static void mmc_sd_suspend(struct mmc_host *host)
- +#else
- +static int mmc_sd_suspend(struct mmc_host *host)
- +#endif
- +/* ATHENV */
- {
- BUG_ON(!host);
- BUG_ON(!host->card);
- @@ -611,6 +617,9 @@
- mmc_deselect_cards(host);
- host->card->state &= ~MMC_STATE_HIGHSPEED;
- mmc_release_host(host);
- +/* ATHENV */
- + return 0;
- +/* ATHENV */
- }
- /*
- @@ -619,7 +628,12 @@
- * This function tries to determine if the same card is still present
- * and, if so, restore all state to it.
- */
- +/* ATHENV */
- +#if 0
- static void mmc_sd_resume(struct mmc_host *host)
- +#else
- +static int mmc_sd_resume(struct mmc_host *host)
- +#endif
- {
- int err;
- #ifdef CONFIG_MMC_PARANOID_SD_INIT
- @@ -648,7 +662,8 @@
- err = mmc_sd_init_card(host, host->ocr, host->card);
- #endif
- mmc_release_host(host);
- -
- +/* ATHENV */
- +#if 0
- if (err) {
- mmc_sd_remove(host);
- @@ -656,7 +671,10 @@
- mmc_detach_bus(host);
- mmc_release_host(host);
- }
- -
- +#else
- + return err;
- +#endif
- +/* ATHENV */
- }
- #else
- diff -urB -x .git msm/drivers/mmc/core/sdio.c zte/drivers/mmc/core/sdio.c
- --- msm/drivers/mmc/core/sdio.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/core/sdio.c Thu Oct 28 11:55:28 2010
- @@ -198,6 +198,175 @@
- return 0;
- }
- +/* ATHENV */
- +/*
- + * Handle the detection and initialisation of a card.
- + *
- + * In the case of a resume, "oldcard" will contain the card
- + * we're trying to reinitialise.
- + */
- +static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
- + struct mmc_card *oldcard)
- +{
- + struct mmc_card *card;
- + int err;
- +
- + BUG_ON(!host);
- + WARN_ON(!host->claimed);
- +
- + {
- + struct mmc_card tempcard;
- + tempcard.host = host;
- + mmc_io_rw_direct(&tempcard, 1, 0, SDIO_CCCR_ABORT, 0x08, NULL);
- + }
- +
- + /*
- + * Since we're changing the OCR value, we seem to
- + * need to tell some cards to go back to the idle
- + * state. We wait 1ms to give cards time to
- + * respond.
- + */
- + mmc_go_idle(host);
- +
- + /*
- + * Inform the card of the voltage
- + */
- + err = mmc_send_io_op_cond(host, host->ocr, &ocr);
- + if (err)
- + goto err;
- +
- + /*
- + * For SPI, enable CRC as appropriate.
- + */
- + if (mmc_host_is_spi(host)) {
- + err = mmc_spi_set_crc(host, use_spi_crc);
- + if (err)
- + goto err;
- + }
- +
- + /*
- + * Allocate card structure.
- + */
- + card = mmc_alloc_card(host, NULL);
- + if (IS_ERR(card)) {
- + err = PTR_ERR(card);
- + goto err;
- + }
- +
- + card->type = MMC_TYPE_SDIO;
- +
- + /*
- + * For native busses: set card RCA and quit open drain mode.
- + */
- + if (!mmc_host_is_spi(host)) {
- + err = mmc_send_relative_addr(host, &card->rca);
- + if (err)
- + goto remove;
- +
- + mmc_set_bus_mode(host, MMC_BUSMODE_PUSHPULL);
- + }
- +
- + /*
- + * Select card, as all following commands rely on that.
- + */
- + if (!mmc_host_is_spi(host)) {
- + err = mmc_select_card(card);
- + if (err)
- + goto remove;
- + }
- +
- + /*
- + * Read the common registers.
- + */
- +#ifdef CONFIG_MMC_EMBEDDED_SDIO
- + if (host->embedded_sdio_data.cccr)
- + memcpy(&card->cccr, host->embedded_sdio_data.cccr,
- + sizeof(struct sdio_cccr));
- + else {
- +#endif
- + err = sdio_read_cccr(card);
- + if (err)
- + goto remove;
- +
- +#ifdef CONFIG_MMC_EMBEDDED_SDIO
- + }
- +#endif
- +
- +#ifdef CONFIG_MMC_EMBEDDED_SDIO
- + if (host->embedded_sdio_data.cis)
- + memcpy(&card->cis, host->embedded_sdio_data.cis,
- + sizeof(struct sdio_cis));
- + else {
- +#endif
- + /*
- + * Read the common CIS tuples.
- + */
- + err = sdio_read_common_cis(card);
- + if (err)
- + goto remove;
- +
- +#ifdef CONFIG_MMC_EMBEDDED_SDIO
- + }
- +#endif
- +
- + if (oldcard) {
- + int same = (card->cis.vendor == oldcard->cis.vendor &&
- + card->cis.device == oldcard->cis.device);
- + mmc_remove_card(card);
- + if (!same) {
- + err = -ENOENT;
- + goto err;
- + }
- + card = oldcard;
- + }
- +
- + /*
- + * Switch to high-speed (if supported).
- + */
- +#if 1
- + err = sdio_enable_hs(card);
- + if (err)
- + goto remove;
- +
- + /*
- + * Change to the card's maximum speed.
- + */
- + if (mmc_card_highspeed(card)) {
- + /*
- + * The SDIO specification doesn't mention how
- + * the CIS transfer speed register relates to
- + * high-speed, but it seems that 50 MHz is
- + * mandatory.
- + */
- + mmc_set_clock(host, 50000000);
- + } else {
- + mmc_set_clock(host, card->cis.max_dtr);
- + }
- +#else
- + (void)&sdio_enable_hs;
- + mmc_set_clock(host, 25000000);
- +#endif
- +
- + /*
- + * Switch to wider bus (if supported).
- + */
- + err = sdio_enable_wide(card);
- + if (err)
- + goto remove;
- +
- + if (!oldcard)
- + host->card = card;
- + return 0;
- +
- +remove:
- + if (!oldcard)
- + mmc_remove_card(card);
- +
- +err:
- + return err;
- +}
- +/* ATHENV */
- +
- /*
- * Host is being removed. Free up the current card.
- */
- @@ -247,10 +416,81 @@
- }
- }
- +/* ATHENV */
- +/*
- + * SDIO suspend. We need to suspend all functions separately.
- + * Therefore all registered functions must have drivers with suspend
- + * and resume methods. Failing that we simply remove the whole card.
- + */
- +static int mmc_sdio_suspend(struct mmc_host *host)
- +{
- + int i, err = 0;
- + const struct dev_pm_ops *pmops;
- + for (i = 0; i < host->card->sdio_funcs; i++) {
- + struct sdio_func *func = host->card->sdio_func[i];
- + if (func && sdio_func_present(func) && func->dev.driver) {
- + pmops = func->dev.driver->pm;
- + if (!pmops || !pmops->suspend || !pmops->resume) {
- + /* force removal of entire card in that case */
- + err = -ENOSYS;
- + } else
- + err = pmops->suspend(&func->dev);
- + if (err)
- + break;
- + }
- + }
- + while (err && --i >= 0) {
- + struct sdio_func *func = host->card->sdio_func[i];
- + if (func && sdio_func_present(func) && func->dev.driver) {
- + pmops = func->dev.driver->pm;
- + pmops->resume(&func->dev);
- + }
- + }
- +
- + return err;
- +}
- +
- +static int mmc_sdio_resume(struct mmc_host *host)
- +{
- + int i, err;
- + const struct dev_pm_ops *pmops;
- + BUG_ON(!host);
- + BUG_ON(!host->card);
- +
- + /* Basic card reinitialization. */
- + mmc_claim_host(host);
- + err = mmc_sdio_init_card(host, host->ocr, host->card);
- + mmc_release_host(host);
- +
- +/*
- + * If the card looked to be the same as before suspending, then
- + * we proceed to resume all card functions. If one of them returns
- + * an error then we simply return that error to the core and the
- + * card will be redetected as new. It is the responsibility of
- + * the function driver to perform further tests with the extra
- + * knowledge it has of the card to confirm the card is indeed the
- + * same as before suspending (same MAC address for network cards,
- + * etc.) and return an error otherwise.
- + */
- + for (i = 0; !err && i < host->card->sdio_funcs; i++) {
- + struct sdio_func *func = host->card->sdio_func[i];
- + if (func && sdio_func_present(func) && func->dev.driver) {
- + pmops = func->dev.driver->pm;
- + err = pmops->resume(&func->dev);
- + }
- + }
- +
- + return err;
- +}
- +/* ATHENV */
- static const struct mmc_bus_ops mmc_sdio_ops = {
- .remove = mmc_sdio_remove,
- .detect = mmc_sdio_detect,
- +/* ATHENV */
- + .suspend = mmc_sdio_suspend,
- + .resume = mmc_sdio_resume,
- +/* ATHENV */
- };
- @@ -295,7 +535,8 @@
- err = -EINVAL;
- goto err;
- }
- -
- +/* ATHENV */
- +#if 0
- /*
- * Inform the card of the voltage
- */
- @@ -311,17 +552,34 @@
- if (err)
- goto err;
- }
- +#else
- + /*
- + * Detect and init the card.
- + */
- + err = mmc_sdio_init_card(host, host->ocr, NULL);
- + if (err)
- + goto err;
- + card = host->card;
- +#endif
- +/* ATHENV */
- /*
- * The number of functions on the card is encoded inside
- * the ocr.
- */
- +/* ATHENV */
- +#if 0
- funcs = (ocr & 0x70000000) >> 28;
- -
- +#else
- + card->sdio_funcs = funcs = (ocr & 0x70000000) >> 28;
- +#endif
- +/* ATHENV */
- #ifdef CONFIG_MMC_EMBEDDED_SDIO
- if (host->embedded_sdio_data.funcs)
- funcs = host->embedded_sdio_data.num_funcs;
- #endif
- +/* ATHENV */
- +#if 0
- /*
- * Allocate card structure.
- @@ -416,6 +674,8 @@
- if (err)
- goto remove;
- +#endif
- +/* ATHENV */
- /*
- * Initialize (but don't add) all present functions.
- */
- diff -urB -x .git msm/drivers/mmc/core/sdio_irq.c zte/drivers/mmc/core/sdio_irq.c
- --- msm/drivers/mmc/core/sdio_irq.c Mon Nov 1 12:09:57 2010
- +++ zte/drivers/mmc/core/sdio_irq.c Thu Oct 28 11:55:28 2010
- @@ -144,7 +144,18 @@
- if (host->caps & MMC_CAP_SDIO_IRQ)
- host->ops->enable_sdio_irq(host, 0);
- - pr_debug("%s: IRQ thread exiting with code %d\n",
- +/* ATHENV */
- + /* someone is trying to reclaim it? */
- + while (!kthread_should_stop()) {
- + pr_info("[%s]: [%d], wait for someone to reclaim\n", __func__, current->pid);
- + set_current_state(TASK_INTERRUPTIBLE);
- + schedule_timeout(HZ);
- + set_current_state(TASK_RUNNING);
- + }
- + //wake_unlock(&mmc_sdio_irq_wake_lock);
- +/* ATHENV */
- +
- + pr_info("[WIFI]_%s: IRQ thread exiting with code %d\n",
- mmc_hostname(host), ret);
- return ret;
- @@ -180,7 +191,21 @@
- if (!--host->sdio_irqs) {
- atomic_set(&host->sdio_irq_thread_abort, 1);
- + /* ATHENV */
- +#if 0
- kthread_stop(host->sdio_irq_thread);
- +#else
- + if (host->claimed) {
- + pr_info("[%s] host was claimed release it first\n", __FUNCTION__);
- + mmc_release_host(host);
- + kthread_stop(host->sdio_irq_thread);
- + mmc_claim_host(host);
- + } else {
- + kthread_stop(host->sdio_irq_thread);
- + }
- + pr_info("destroy mmc_sdio_irq_wake_lock\n");
- +#endif
- +/* ATHENV */
- }
- return 0;
- diff -urB -x .git msm/drivers/mmc/host/msm_sdcc.c zte/drivers/mmc/host/msm_sdcc.c
- --- msm/drivers/mmc/host/msm_sdcc.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/host/msm_sdcc.c Thu Oct 28 11:55:28 2010
- @@ -14,6 +14,9 @@
- * Author: San Mehat (san@android.com)
- *
- */
- +//ruanmeisi 20100408 ruanmeisi_20100408 p729b sd suport host plug don't shutdown polling
- +//ruanmeisi 20100408 ruanmeisi_20100418 add CONFIG_MACH_BLADE macro
- +//ruanmeisi 20100510 ruanmeisi_20100510 clean host->pio when stop data
- #include <linux/module.h>
- #include <linux/moduleparam.h>
- @@ -46,15 +49,39 @@
- #include <mach/clk.h>
- #include <mach/dma.h>
- #include <mach/htc_pwrsink.h>
- +//ruanmeisi
- +#include <linux/proc_fs.h>
- +#define ATH_PATCH
- #include "msm_sdcc.h"
- #define DRIVER_NAME "msm-sdcc"
- +//ruanmeisi 20100221
- +
- +#define T_CARD_DRIVER_ID 1
- +
- +
- +/* #define DBG(host, fmt, args...) \ */
- +/* pr_debug("%s: %s: " fmt "\n", mmc_hostname(host->mmc), __func__ , args) */
- +
- +#define DPRINTK(fmt, args...) \
- + printk(KERN_ERR "mmc:%s: %d: " fmt "", \
- + __FUNCTION__, __LINE__, ## args)
- +
- #define DBG(host, fmt, args...) \
- - pr_debug("%s: %s: " fmt "\n", mmc_hostname(host->mmc), __func__ , args)
- + do { \
- + if(mmc_debug) \
- + printk(KERN_ERR"%s: %s: " fmt "\n", mmc_hostname(host->mmc), __func__ , args) ; \
- + }while(0) \
- +
- +static struct proc_dir_entry * d_entry;
- +int mmc_debug = 0;
- +
- +int queue_redetect_work(struct work_struct *work);
- +void mmc_redetect_card(struct mmc_host *host);
- #define IRQ_DEBUG 0
- #if defined(CONFIG_DEBUG_FS)
- @@ -199,6 +226,12 @@
- static void
- msmsdcc_stop_data(struct msmsdcc_host *host)
- {
- +
- + //ruanmeisi_20100510
- + if (T_CARD_DRIVER_ID == host->pdev_id) {
- + memset(&host->pio, 0, sizeof(host->pio));
- + }
- + //end
- host->curr.data = NULL;
- host->curr.got_dataend = host->curr.got_datablkend = 0;
- }
- @@ -693,7 +726,59 @@
- if (!(status & (MCI_TXFIFOHALFEMPTY | MCI_RXDATAAVLBL)))
- break;
- + //ruanmeisi_20100510
- + if(NULL == host->curr.mrq) {
- + pr_info("[rms:sd]:%s pio host->curr.mrq is null\n",
- + mmc_hostname(host->mmc));
- +
- + if(status & MCI_RXACTIVE) {
- + int read_cnt = 0;
- + while(readl(base+MMCISTATUS) & MCI_RXDATAAVLBL) {
- + readl(base+MMCIFIFO+(1%MCI_FIFOSIZE));
- + if((read_cnt++) > MCI_FIFOSIZE)
- + break;
- + }
- + writel(0, base + MMCIMASK1);
- + }
- +
- + if(status & MCI_TXACTIVE) {
- + writel(0, base + MMCIMASK1);
- + }
- +
- + return IRQ_HANDLED;
- + }
- + //ZTE_WIFI_HP_019
- + //hp merge htc patch for pio.sg NULL
- + //here we catch the pio.sg==NULL, and stop current transaction,
- + //let app to handle the error
- + if(host->pio.sg == NULL) {
- + pr_info("[hp@wifi]:%s pio scatter list is null\n",
- + mmc_hostname(host->mmc));
- +
- + if(status & MCI_RXACTIVE) {
- + int read_cnt = 0;
- + while(readl(base+MMCISTATUS) & MCI_RXDATAAVLBL) {
- + readl(base+MMCIFIFO+(1%MCI_FIFOSIZE));
- + if((read_cnt++) > MCI_FIFOSIZE)
- + break;
- + }
- + writel(MCI_RXDATAAVLBLMASK, base + MMCIMASK1);
- + }
- +
- + if(status & MCI_TXACTIVE) {
- + struct mmc_request *mrq;
- +
- + writel(0, base + MMCIMASK1);
- + mrq = host->curr.mrq;
- + mrq->data->error = 1;
- + if(mrq->done)
- + mrq->done(mrq);
- + }
- +
- + return IRQ_HANDLED;
- + }
- + //ZTE_WIFI_HP_019 end
- /* Map the current scatter buffer */
- local_irq_save(flags);
- buffer = kmap_atomic(sg_page(host->pio.sg),
- @@ -812,7 +897,9 @@
- cmd->resp[1] = readl(base + MMCIRESPONSE1);
- cmd->resp[2] = readl(base + MMCIRESPONSE2);
- cmd->resp[3] = readl(base + MMCIRESPONSE3);
- -
- + //ruanmeisi_20100510
- + del_timer(&host->command_timer);
- + //end
- if (status & MCI_CMDTIMEOUT) {
- #if VERBOSE_COMMAND_TIMEOUTS
- pr_err("%s: Command timeout\n",
- @@ -996,6 +1083,9 @@
- }
- msmsdcc_request_start(host, mrq);
- + //ruanmeisi_20100510
- + mod_timer(&host->command_timer, jiffies + HZ);
- + //end
- spin_unlock_irqrestore(&host->lock, flags);
- }
- @@ -1167,6 +1257,46 @@
- msmsdcc_check_status((unsigned long) host);
- }
- +
- +/* ruanmeisi_20100510 command timeout handle */
- +/*
- + * called when a command expires.
- + * Dump some debugging, and then error
- + * out the transaction.
- + */
- +static void
- +msmsdcc_command_expired(unsigned long _data)
- +{
- + struct msmsdcc_host *host = (struct msmsdcc_host *) _data;
- + struct mmc_request *mrq;
- + unsigned long flags;
- +
- + spin_lock_irqsave(&host->lock, flags);
- + mrq = host->curr.mrq;
- +
- + if (!mrq) {
- + printk(KERN_INFO "%s: Command expiry misfire\n",
- + mmc_hostname(host->mmc));
- + spin_unlock_irqrestore(&host->lock, flags);
- + return;
- + }
- +
- + printk(KERN_ERR "%s: Command timeout [%u] (%p %p %p %p)\n",
- + mmc_hostname(host->mmc), mrq->cmd->opcode, mrq, mrq->cmd,
- + mrq->data, host->dma.sg);
- +
- + mrq->cmd->error = -ETIMEDOUT;
- + msmsdcc_stop_data(host);
- +
- + writel(0, host->base + MMCICOMMAND);
- +
- + host->curr.mrq = NULL;
- + host->curr.cmd = NULL;
- +
- + spin_unlock_irqrestore(&host->lock, flags);
- + mmc_request_done(host->mmc, mrq);
- +}
- +/*ruanmeisi_20100510 end */
- static int
- msmsdcc_init_dma(struct msmsdcc_host *host)
- {
- @@ -1250,10 +1380,110 @@
- return count;
- }
- +/* ATHENV +++ */
- +static ssize_t
- +set_detect_change(struct device *dev, struct device_attribute *attr,
- + const char *buf, size_t count)
- +{
- + struct mmc_host *mmc = dev_get_drvdata(dev);
- + struct msmsdcc_host *host = mmc_priv(mmc);
- + int value;
- + if (sscanf(buf, "%d", &value)==1 && value) {
- + mmc_detect_change(host->mmc, 0);
- + }
- + return count;
- +}
- +static DEVICE_ATTR(detect_change, S_IRUGO | S_IWUSR,
- + NULL, set_detect_change);
- +/* ATHENV --- */
- +
- +//ruanmeisi_20091224 sysfs interface for debug
- +
- +void msmsdcc_mmc_redetect(struct work_struct *work)
- +{
- + struct msmsdcc_host *msmsdcchost =
- + container_of(work, struct msmsdcc_host, redetect);
- + struct mmc_host *host = msmsdcchost->mmc;
- +#ifdef CONFIG_HAS_EARLYSUSPEND
- + if (msmsdcchost->polling_enabled) {
- + unsigned long flags;
- + spin_lock_irqsave(&host->lock, flags);
- + msmsdcchost->mmc->caps |= MMC_CAP_NEEDS_POLL;
- + spin_unlock_irqrestore(&host->lock, flags);
- + }
- +#endif
- + mmc_redetect_card(host);
- + return ;
- +}
- +
- +static ssize_t
- +show_highspeed(struct device *dev, struct device_attribute *attr, char *buf)
- +{
- + struct mmc_host *mmc = dev_get_drvdata(dev);
- + struct msmsdcc_host *host = mmc_priv(mmc);
- + int poll;
- + unsigned long flags;
- +
- + spin_lock_irqsave(&host->lock, flags);
- + poll = !!(mmc->caps & MMC_CAP_SD_HIGHSPEED);
- + spin_unlock_irqrestore(&host->lock, flags);
- +
- + return snprintf(buf, PAGE_SIZE, "%d\n", poll);
- +}
- +
- +static ssize_t
- +set_highspeed(struct device *dev, struct device_attribute *attr,
- + const char *buf, size_t count)
- +{
- + struct mmc_host *mmc = dev_get_drvdata(dev);
- + struct msmsdcc_host *host = mmc_priv(mmc);
- + int value;
- + unsigned long flags;
- +
- + sscanf(buf, "%d", &value);
- +
- + spin_lock_irqsave(&host->lock, flags);
- + if (value) {
- + mmc->caps |= MMC_CAP_SD_HIGHSPEED;
- + mmc_detect_change(host->mmc, 0);
- + } else {
- + mmc->caps &= ~MMC_CAP_SD_HIGHSPEED;
- + }
- + spin_unlock_irqrestore(&host->lock, flags);
- + return count;
- +}
- +
- +
- +static ssize_t
- +set_redetect(struct device *dev, struct device_attribute *attr,
- + const char *buf, size_t count)
- +{
- + struct mmc_host *mmc = dev_get_drvdata(dev);
- + struct msmsdcc_host *host = mmc_priv(mmc);
- + queue_redetect_work(&(host->redetect));
- + return count;
- +}
- +
- +
- +static DEVICE_ATTR(redetect, S_IRUGO | S_IWUSR,
- + NULL, set_redetect);
- +static DEVICE_ATTR(highspeed, S_IRUGO | S_IWUSR,
- + show_highspeed, set_highspeed);
- +
- +
- +//end
- +
- static DEVICE_ATTR(polling, S_IRUGO | S_IWUSR,
- show_polling, set_polling);
- static struct attribute *dev_attrs[] = {
- &dev_attr_polling.attr,
- +/* ATHENV +++ */
- + &dev_attr_detect_change.attr,
- +/* ATHENV --- */
- + //ruanmeisi_20091224 debug interface
- + &dev_attr_redetect.attr,
- + &dev_attr_highspeed.attr,
- + //end
- NULL,
- };
- static struct attribute_group dev_attr_grp = {
- @@ -1266,7 +1496,13 @@
- struct msmsdcc_host *host =
- container_of(h, struct msmsdcc_host, early_suspend);
- unsigned long flags;
- -
- +#ifdef CONFIG_MACH_BLADE
- + //ruanmeisi_20100408 p729b sd suport host plug
- + //don't shutdown polling
- + if (T_CARD_DRIVER_ID == host->pdev_id) {
- + return ;
- + }
- +#endif
- spin_lock_irqsave(&host->lock, flags);
- host->polling_enabled = host->mmc->caps & MMC_CAP_NEEDS_POLL;
- host->mmc->caps &= ~MMC_CAP_NEEDS_POLL;
- @@ -1277,7 +1513,13 @@
- struct msmsdcc_host *host =
- container_of(h, struct msmsdcc_host, early_suspend);
- unsigned long flags;
- -
- +#ifdef CONFIG_MACH_BLADE
- + //ruanmeisi_20100408 p729b sd suport host plug
- + //don't shutdown polling
- + if (T_CARD_DRIVER_ID == host->pdev_id) {
- + return ;
- + }
- +#endif
- if (host->polling_enabled) {
- spin_lock_irqsave(&host->lock, flags);
- host->mmc->caps |= MMC_CAP_NEEDS_POLL;
- @@ -1427,7 +1669,11 @@
- #ifdef CONFIG_MMC_MSM_SDIO_SUPPORT
- mmc->caps |= MMC_CAP_SDIO_IRQ;
- #endif
- -
- + //ruanmeisi 20100221
- + if (T_CARD_DRIVER_ID == host->pdev_id) {
- + mmc->caps |= MMC_CAP_NEEDS_POLL;
- + }
- + //end
- mmc->max_phys_segs = NR_SG;
- mmc->max_hw_segs = NR_SG;
- mmc->max_blk_size = 4096; /* MCI_DATA_CTL BLOCKSIZE up to 4096 */
- @@ -1484,7 +1730,16 @@
- disable_irq(host->plat->sdiowakeup_irq);
- }
- }
- +//ruanmeisi_20100510
- +/*
- + * Setup a command timer. We currently need this due to
- + * some 'strange' timeout / error handling situations.
- + */
- + init_timer(&host->command_timer);
- + host->command_timer.data = (unsigned long) host;
- + host->command_timer.function = msmsdcc_command_expired;
- +//end
- ret = request_irq(irqres->start, msmsdcc_irq, IRQF_SHARED,
- DRIVER_NAME " (cmd)", host);
- if (ret)
- @@ -1522,6 +1777,8 @@
- host->eject);
- pr_info("%s: Power save feature enable = %d\n",
- mmc_hostname(mmc), msmsdcc_pwrsave);
- + pr_info("%s: Dummy52 feature enable = %d\n",
- + mmc_hostname(mmc), plat->dummy52_required);
- if (host->dma.channel != -1) {
- pr_info("%s: DM non-cached buffer at %p, dma_addr 0x%.8x\n",
- @@ -1540,6 +1797,8 @@
- if (ret)
- goto irq_free;
- }
- +//ruanmeisi
- + INIT_WORK(&host->redetect, msmsdcc_mmc_redetect);
- return 0;
- irq_free:
- free_irq(irqres->start, host);
- @@ -1584,6 +1843,9 @@
- DBG(host, "Removing SDCC2 device = %d\n", pdev->id);
- plat = host->plat;
- + //ruanmeisi_20100510
- + del_timer_sync(&host->command_timer);
- + //end
- if (!plat->status_irq)
- sysfs_remove_group(&pdev->dev.kobj, &dev_attr_grp);
- @@ -1623,6 +1885,46 @@
- }
- #ifdef CONFIG_PM
- +/* ATHENV */
- +struct msmsdcc_host *wlan_host;
- +void plat_disable_wlan_slot(void)
- +{
- + struct msmsdcc_host *host = wlan_host;
- +
- + if (host->plat->status_irq)
- + disable_irq(host->plat->status_irq);
- + writel(0, host->base + MMCIMASK0);
- + if (host->clks_on) {
- + clk_disable(host->clk);
- + clk_disable(host->pclk);
- + host->clks_on = 0;
- + }
- + if (host->plat->sdiowakeup_irq)
- + enable_irq(host->plat->sdiowakeup_irq);
- +}
- +EXPORT_SYMBOL(plat_disable_wlan_slot);
- +
- +void plat_enable_wlan_slot(void)
- +{
- + struct msmsdcc_host *host = wlan_host;
- + unsigned long flags;
- +
- + spin_lock_irqsave(&host->lock, flags);
- + if (!host->clks_on) {
- + clk_enable(host->pclk);
- + clk_enable(host->clk);
- + host->clks_on = 1;
- + }
- + writel(host->mci_irqenable, host->base + MMCIMASK0);
- + spin_unlock_irqrestore(&host->lock, flags);
- + if (host->plat->sdiowakeup_irq)
- + disable_irq(host->plat->sdiowakeup_irq);
- + if (host->plat->status_irq)
- + enable_irq(host->plat->status_irq);
- +
- +}
- +EXPORT_SYMBOL(plat_enable_wlan_slot);
- +/* ATHENV */
- static int
- msmsdcc_suspend(struct platform_device *dev, pm_message_t state)
- {
- @@ -1634,12 +1936,21 @@
- if (test_and_set_bit(0, &host->suspended))
- return 0;
- #endif
- + pr_info("%s pdev_id = %d\n", __FUNCTION__, host->pdev_id);
- +
- if (mmc) {
- if (host->plat->status_irq)
- disable_irq(host->plat->status_irq);
- -
- +#ifdef ATH_PATCH /* ATHENV+++ */
- + rc = mmc_suspend_host(mmc, state);
- + if (rc!=0) {
- + if (host->plat->status_irq)
- + enable_irq(host->plat->status_irq);
- + }
- +#else
- if (!mmc->card || mmc->card->type != MMC_TYPE_SDIO)
- rc = mmc_suspend_host(mmc, state);
- +#endif /* ATHENV--- */
- if (!rc) {
- writel(0, host->base + MMCIMASK0);
- @@ -1649,9 +1960,19 @@
- host->clks_on = 0;
- }
- }
- -
- +#ifdef ATH_PATCH /* ATHENV+++ */
- + if (mmc->last_suspend_error) {
- + /*
- + * save host for WoW mode
- + * Don't enable sdio wakeup irq before system suspend
- + */
- + wlan_host = host;
- + return 0;
- + }
- +#else
- if (host->plat->sdiowakeup_irq)
- enable_irq(host->plat->sdiowakeup_irq);
- +#endif /* ATHENV--- */
- }
- return rc;
- }
- @@ -1667,7 +1988,16 @@
- if (!test_and_clear_bit(0, &host->suspended))
- return 0;
- #endif
- + pr_info("%s pdev_id = %d\n", __FUNCTION__, host->pdev_id);
- +
- if (mmc) {
- +/* ATHENV+++ */
- + if (mmc->last_suspend_error) {
- + wlan_host = host;
- + mmc->last_suspend_error = 0;
- + return 0;
- + }
- +/* ATHENV--- */
- spin_lock_irqsave(&host->lock, flags);
- if (!host->clks_on) {
- clk_enable(host->pclk);
- @@ -1678,11 +2008,14 @@
- writel(host->mci_irqenable, host->base + MMCIMASK0);
- spin_unlock_irqrestore(&host->lock, flags);
- -
- +#ifdef ATH_PATCH /* ATHENV+++ */
- + if (1) {
- +#else
- if (host->plat->sdiowakeup_irq)
- disable_irq(host->plat->sdiowakeup_irq);
- if (!mmc->card || mmc->card->type != MMC_TYPE_SDIO) {
- +#endif /* ATHENV--- */
- #ifdef CONFIG_MMC_MSM7X00A_RESUME_IN_WQ
- schedule_work(&host->resume_task);
- #else
- @@ -1726,6 +2059,60 @@
- },
- };
- +//ruanmeisi_091224 proc interface
- +static int msm_sdcc_read_proc(
- + char *page, char **start, off_t off, int count, int *eof, void *data)
- +{
- + int len = 0;
- + len = sprintf(page, "%s\n",
- + !!mmc_debug == 1?"on":"off");
- + return len;
- +
- +}
- +
- +static int msm_sdcc_write_proc(struct file *file, const char __user *buffer,
- + unsigned long count, void *data)
- +{
- + char tmp[16] = {0};
- + int len = 0;
- + len = count;
- + if (count > sizeof(tmp)) {
- + len = sizeof(tmp) - 1;
- + }
- + if(copy_from_user(tmp, buffer, len))
- + return -EFAULT;
- + if (strstr(tmp, "on")) {
- + mmc_debug = 1;
- + } else if (strstr(tmp, "off")) {
- + mmc_debug = 0;
- + }
- + return count;
- +
- +}
- +
- +
- +void
- +init_mmc_proc(void)
- +{
- + d_entry = create_proc_entry("msm_sdcc",
- + 0, NULL);
- + if (d_entry) {
- + d_entry->read_proc = msm_sdcc_read_proc;
- + d_entry->write_proc = msm_sdcc_write_proc;
- + d_entry->data = NULL;
- + }
- +
- +}
- +
- +void
- +deinit_mmc_proc(void)
- +{
- + if (NULL != d_entry) {
- + remove_proc_entry("msm_sdcc", NULL);
- + d_entry = NULL;
- + }
- +}
- +//end
- static int __init msmsdcc_init(void)
- {
- #if defined(CONFIG_DEBUG_FS)
- @@ -1736,11 +2123,17 @@
- return ret;
- }
- #endif
- + //ruanmeisi_091224 proc interface
- + init_mmc_proc();
- + //end
- return platform_driver_register(&msmsdcc_driver);
- }
- static void __exit msmsdcc_exit(void)
- {
- + //ruanmeisi_091224 proc interface
- + deinit_mmc_proc();
- + //end
- platform_driver_unregister(&msmsdcc_driver);
- #if defined(CONFIG_DEBUG_FS)
- diff -urB -x .git msm/drivers/mmc/host/msm_sdcc.h zte/drivers/mmc/host/msm_sdcc.h
- --- msm/drivers/mmc/host/msm_sdcc.h Mon Nov 1 13:46:22 2010
- +++ zte/drivers/mmc/host/msm_sdcc.h Thu Oct 28 11:55:28 2010
- @@ -10,6 +10,7 @@
- *
- * - Based on mmci.h
- */
- +/*ruanmeisi 20100510 ruanmeisi_20100510 timer for send command*/
- #ifndef _MSM_SDCC_H
- #define _MSM_SDCC_H
- @@ -266,6 +267,11 @@
- unsigned int mci_irqenable;
- unsigned int dummy_52_needed;
- unsigned int dummy_52_state;
- +
- + //ruanmeisi_091224 redetect worker
- + struct work_struct redetect;
- + //ruanmeisi_20100510
- + struct timer_list command_timer;
- };
- diff -urB -x .git msm/drivers/mtd/devices/msm_nand.c zte/drivers/mtd/devices/msm_nand.c
- --- msm/drivers/mtd/devices/msm_nand.c Mon Nov 1 14:21:30 2010
- +++ zte/drivers/mtd/devices/msm_nand.c Mon Oct 18 10:12:04 2010
- @@ -382,6 +382,11 @@
- {0xd580b12c, 0xFFFFFFFF, (128<<20), 1, 2048, (2048<<6), 64, }, /*Micr*/
- {0x5580baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, }, /*Hynx*/
- {0x5510baad, 0xFFFFFFFF, (256<<20), 1, 2048, (2048<<6), 64, }, /*Hynx*/
- +
- +#ifdef CONFIG_ZTE_PLATFORM
- + {0x5500bcec, 0xFFFFFFFF, (512<<20), 1, 2048, (2048<<6), 64,},
- + {0x5510bcad, 0xFFFFFFFF, (512<<20), 1, 2048, (2048<<6), 64, },
- +#endif
- /* Note: Width flag is 0 for 8 bit Flash and 1 for 16 bit flash */
- /* Note: The First row will be filled at runtime during ONFI probe */
- };
- diff -urB -x .git msm/drivers/serial/msm_serial_hs.c zte/drivers/serial/msm_serial_hs.c
- --- msm/drivers/serial/msm_serial_hs.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/serial/msm_serial_hs.c Mon Oct 18 10:16:50 2010
- @@ -528,6 +529,42 @@
- return ret;
- }
- EXPORT_SYMBOL(msm_hs_tx_empty);
- +
- +#ifdef CONFIG_MODEMCTL
- +
- +
- +unsigned int msm_hs_dm1_tx_empty(void)
- +{
- + unsigned int data;
- + unsigned int ret = 0;
- +
- +
- + struct msm_hs_port *msm_uport = NULL;
- +
- + printk(KERN_WARNING "@@@@ msm_hs_dm1_tx_empty++ \n");
- +
- + msm_uport = &q_uart_port[1];
- + if(!msm_uport)
- + {
- + printk(KERN_WARNING "@@ Error get the device /dev/ttyHS1--q_uart_port[1], maybe not init \n");
- + return MODEMCTL_UARTDM1_UNINIT;
- + }
- +
- + clk_enable(msm_uport->clk);
- +
- + data = msm_hs_read(&(msm_uport->uport), UARTDM_SR_ADDR);
- + if (data & UARTDM_SR_TXEMT_BMSK)
- + ret = TIOCSER_TEMT;
- +
- + clk_disable(msm_uport->clk);
- +
- + printk(KERN_WARNING "@@@@ msm_hs_dm1_tx_empty-- the ret = %d\n", ret);
- +
- + return ret;
- +}
- +EXPORT_SYMBOL(msm_hs_dm1_tx_empty);
- +
- +#endif
- /*
- * Standard API, Stop transmitter.
- diff -urB -x .git msm/drivers/usb/function/mass_storage.c zte/drivers/usb/function/mass_storage.c
- --- msm/drivers/usb/function/mass_storage.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/usb/function/mass_storage.c Thu Oct 28 11:49:56 2010
- @@ -43,6 +43,12 @@
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- +/* ========================================================================================
- +when who what, where, why comment tag
- +-------- ---- ----------------------------- ----------------------
- +2010-02-02 rms fsg_main_thread exit fail ruanmeisi_100203
- +
- +==========================================================================================*/
- //#define DEBUG
- //#define VERBOSE_DEBUG
- //#define DUMP_MSGS
- @@ -325,6 +331,8 @@
- int thread_wakeup_needed;
- struct completion thread_notifier;
- + //ruanmeisi_100203
- + struct completion thread_notifier_exit;
- struct task_struct *thread_task;
- int cmnd_size;
- @@ -2475,7 +2483,9 @@
- close_all_backing_files(fsg);
- /* Let the unbind and cleanup routines know the thread has exited */
- - complete_and_exit(&fsg->thread_notifier, 0);
- + //ruanmeisi_100203
- + complete(&fsg->thread_notifier);
- + complete_and_exit(&fsg->thread_notifier_exit, 0);
- }
- @@ -2705,6 +2715,10 @@
- raise_exception(fsg, FSG_STATE_EXIT);
- wait_for_completion(&fsg->thread_notifier);
- + /* The cleanup routine waits for this completion also */
- + //ruanmeisi
- + //complete(&fsg->thread_notifier);
- +
- }
- /* Free the data buffers */
- @@ -2814,6 +2828,8 @@
- fsg->buffhds[NUM_BUFFERS - 1].next = &fsg->buffhds[0];
- fsg->state = FSG_STATE_IDLE;
- + //ruanmeisi_100203
- + init_completion(&fsg->thread_notifier_exit);
- fsg->thread_task = kthread_create(fsg_main_thread, fsg,
- "USB mass_storage");
- if (IS_ERR(fsg->thread_task)) {
- @@ -2915,6 +2931,8 @@
- init_rwsem(&fsg->filesem);
- kref_init(&fsg->ref);
- init_completion(&fsg->thread_notifier);
- + //ruanmeisi_100203
- + init_completion(&fsg->thread_notifier_exit);
- the_fsg = fsg;
- return 0;
- @@ -2938,6 +2956,8 @@
- wake_lock_destroy(&fsg->wake_lock_idle);
- switch_dev_unregister(&fsg->sdev);
- test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags);
- + //ruanmeisi_100203
- + wait_for_completion(&fsg->thread_notifier_exit);
- close_all_backing_files(fsg);
- kref_put(&fsg->ref, fsg_release);
- diff -urB -x .git msm/drivers/usb/function/msm_hsusb.c zte/drivers/usb/function/msm_hsusb.c
- --- msm/drivers/usb/function/msm_hsusb.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/usb/function/msm_hsusb.c Thu Oct 28 11:49:56 2010
- @@ -16,6 +16,20 @@
- * GNU General Public License for more details.
- *
- */
- + /*
- + ========================================================================================
- +when who what, where, why comment tag
- +---------- ---------- ---------------------------------------------- -----------------
- +2010-0528 rms ruanmeisi_20100528 if serial_number is not default,bind in kernel
- +2010-04-20 HML config default pid & serialnumber in early-init HML_USB_20100513
- +2010-05-06 wzy add pid 1354 1355 ZTE_USB_006
- +2010-04-20 HML add bind select HML_USB_005
- +2010-03-31 HML delay enum,restore usb mode as composition HML_USB_004
- + switch and modify some hsusb functions attr
- +2010-01-21 HML Extend rpc for read/write,and store HML_USB_003
- + config info in nv.
- +2010-02-11 HML eclair 5210 usb function modify USB-HML-001
- +*/
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
- @@ -73,8 +87,34 @@
- #define is_phy_45nm() (PHY_MODEL(ui->phy_info) == USB_PHY_MODEL_45NM)
- #define is_phy_external() (PHY_TYPE(ui->phy_info) == USB_PHY_EXTERNAL)
- -static int pid = 0x9018;
- +static int pid = 0x01351;
- +//HML_USB_005 add usb bind mode
- +enum usb_bind_mode {
- + BIND_IN_KERNEL=0,
- + BIND_IN_USER,
- +} ;
- +static enum usb_bind_mode g_bind_mode=BIND_IN_KERNEL; //hml
- +int g_debug_enabled=0; //hml
- +static int use_default_pid=0;
- +static enum usb_bind_mode get_bind_mode(void)
- +{
- + return g_bind_mode;
- +}
- +static void set_bind_mode(enum usb_bind_mode mode)
- +{
- + g_bind_mode = mode;
- +}
- +// HML_USB_20100513- debug interface
- +int get_debug_enabled(void)
- +{
- + return g_debug_enabled;
- +}
- +EXPORT_SYMBOL(get_debug_enabled);
- +void set_debug_enabled(int enabled)
- +{
- + g_debug_enabled = enabled;
- +}
- struct usb_fi_ept {
- struct usb_endpoint *ept;
- struct usb_endpoint_descriptor desc;
- @@ -122,8 +162,9 @@
- static void usb_disable_pullup(struct usb_info *ui);
- static struct workqueue_struct *usb_work;
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- static void usb_chg_stop(struct work_struct *w);
- -
- +#endif
- #define USB_STATE_IDLE 0
- #define USB_STATE_ONLINE 1
- #define USB_STATE_OFFLINE 2
- @@ -151,6 +192,32 @@
- USB_CHG_TYPE__INVALID
- };
- +//USB-HML-003 start, add enum type for nv read/write
- +enum usb_opt_nv_item
- +{
- + NV_BACK_LIGHT_I=77,//nv77 used for config/store usb mode
- + NV_FTM_MODE_I = 453// FTM mode
- +};
- +enum usb_opt_nv_type
- +{
- + NV_READ=0,
- + NV_WRITE
- +};
- +/* usb mode enum
- +*/
- +enum usb_conf_mode
- +{
- + HSU_CFG_ALL_INTERFACE=0,
- + HSU_CFG_ADB_MS,
- + HSU_CFG_ADB,
- + HSU_CFG_MS,
- + HSU_CFG_DIAG,
- + HSU_CFG_DIAG_NMEA_MODEM
- +};
- +#define NV_WRITE_SUCCESS 10 //used for rpc call write nv function
- +// HML_USB_20100513:take care of the order,the 4th must to be 0x0112 used for test software.
- +static int zte_usb_pid[]={0x1350,0x1351,0x1352,0x1353,0x0112,0x0111,0x1354,0x1355};//usb zte pid list
- +//USB-HML-003 end
- struct usb_info {
- /* lock for register/queue/device state changes */
- spinlock_t lock;
- @@ -285,6 +352,7 @@
- return sprintf(buf, "%s\n", (ui->online ? "online" : "offline"));
- }
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- #define USB_WALLCHARGER_CHG_CURRENT 1800
- static int usb_get_max_power(struct usb_info *ui)
- {
- @@ -368,6 +436,7 @@
- } else
- pr_info("\n%s: Standard Downstream Port\n", __func__);
- }
- +#endif
- int usb_msm_get_next_strdesc_id(char *str)
- {
- @@ -1589,8 +1658,9 @@
- pr_info("hsusb reset interrupt\n");
- ui->usb_state = USB_STATE_DEFAULT;
- ui->configured = 0;
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- schedule_work(&ui->chg_stop);
- -
- +#endif
- writel(readl(USB_ENDPTSETUPSTAT), USB_ENDPTSETUPSTAT);
- writel(readl(USB_ENDPTCOMPLETE), USB_ENDPTCOMPLETE);
- writel(0xffffffff, USB_ENDPTFLUSH);
- @@ -1612,9 +1682,10 @@
- if (n & STS_SLI) {
- pr_info("hsusb suspend interrupt\n");
- ui->usb_state = USB_STATE_SUSPENDED;
- -
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- /* stop usb charging */
- schedule_work(&ui->chg_stop);
- +#endif
- }
- if (n & STS_UI) {
- @@ -1691,10 +1762,13 @@
- ui->setup_req = usb_ept_alloc_req(&ui->ep0in, SETUP_BUF_SIZE);
- ui->ep0out_req = usb_ept_alloc_req(&ui->ep0out, ui->ep0out.max_pkt);
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- INIT_WORK(&ui->chg_stop, usb_chg_stop);
- + INIT_DELAYED_WORK(&ui->chg_legacy_det, usb_chg_legacy_detect);
- +#endif
- INIT_WORK(&ui->li.wakeup_phy, usb_lpm_wakeup_phy);
- INIT_DELAYED_WORK(&ui->work, usb_do_work);
- - INIT_DELAYED_WORK(&ui->chg_legacy_det, usb_chg_legacy_detect);
- +
- }
- static int usb_is_online(struct usb_info *ui)
- @@ -1969,7 +2043,7 @@
- void usb_start(struct usb_info *ui)
- {
- - int i, ret;
- + int i;
- for (i = 0; i < ui->num_funcs; i++) {
- struct usb_function_info *fi = ui->func[i];
- @@ -1990,6 +2064,7 @@
- queue_delayed_work(usb_work, &ui->work, 0);
- } else {
- /*Initialize pm app RPC */
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11
- ret = msm_pm_app_rpc_init();
- if (ret) {
- pr_err("%s: pm_app_rpc connect failed\n", __func__);
- @@ -2021,6 +2096,12 @@
- ui->active = 1;
- ui->flags |= (USB_FLAG_START | USB_FLAG_RESET);
- queue_delayed_work(usb_work, &ui->work, 0);
- + #else
- + printk("hml usb start !\n");
- + ui->active = 1;
- + ui->flags |= (USB_FLAG_START | USB_FLAG_RESET);
- + queue_delayed_work(usb_work, &ui->work, 0);
- + #endif
- }
- }
- @@ -2049,7 +2130,9 @@
- struct usb_info *ui = the_usb_info;
- unsigned long enabled_functions = 0;
- int i;
- -
- + //ruanmeisi_20100513
- + use_default_pid = 0;
- + //end
- if (!ui || ui->bound || !ui->pdev || !ui->composition)
- return;
- @@ -2113,8 +2196,9 @@
- fi->func->ep0_out = &ui->ep0out;
- fi->func->ep0_in = &ui->ep0in;
- pr_info("%s: name = '%s', map = %d\n", __func__, driver->name, index);
- -
- - usb_try_to_bind();
- +
- + if(BIND_IN_KERNEL == get_bind_mode())//HML_USB_005
- + usb_try_to_bind();
- fail:
- mutex_unlock(&usb_function_list_lock);
- return ret;
- @@ -2212,7 +2296,7 @@
- int i;
- unsigned long flags;
- -
- + pr_info("%s: usb_switch_composition start pid =%d \n", __func__,pid);
- if (!ui->active)
- return;
- if (!usb_validate_product_id(pid))
- @@ -2233,11 +2317,11 @@
- disable_irq(ui->gpio_irq[0]);
- disable_irq(ui->gpio_irq[1]);
- }
- -
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11
- if (ui->usb_state == USB_STATE_NOTATTACHED
- && ui->vbus_sn_notif)
- msm_pm_app_enable_usb_ldo(1);
- -
- +#endif
- usb_lpm_exit(ui);
- if (cancel_work_sync(&ui->li.wakeup_phy))
- usb_lpm_wakeup_phy(NULL);
- @@ -2405,8 +2489,10 @@
- if ((flags & USB_FLAG_START) ||
- (flags & USB_FLAG_RESET)) {
- disable_irq(ui->irq);
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-01
- if (ui->vbus_sn_notif)
- msm_pm_app_enable_usb_ldo(1);
- + #endif
- usb_clk_enable(ui);
- usb_vreg_enable(ui);
- usb_vbus_online(ui);
- @@ -2419,9 +2505,11 @@
- msm_hsusb_suspend_locks_acquire(ui, 1);
- ui->state = USB_STATE_ONLINE;
- usb_enable_pullup(ui);
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- schedule_delayed_work(
- &ui->chg_legacy_det,
- USB_CHG_DET_DELAY);
- + #endif
- pr_info("hsusb: IDLE -> ONLINE\n");
- } else {
- ui->usb_state = USB_STATE_NOTATTACHED;
- @@ -2430,8 +2518,10 @@
- msleep(500);
- usb_lpm_enter(ui);
- pr_info("hsusb: IDLE -> OFFLINE\n");
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-01
- if (ui->vbus_sn_notif)
- msm_pm_app_enable_usb_ldo(0);
- + #endif
- }
- enable_irq(ui->irq);
- break;
- @@ -2443,6 +2533,7 @@
- * the signal to go offline, we must honor it
- */
- if (flags & USB_FLAG_VBUS_OFFLINE) {
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- enum charger_type temp;
- unsigned long f;
- @@ -2463,16 +2554,18 @@
- msm_chg_usb_i_is_not_available();
- msm_chg_usb_charger_disconnected();
- }
- -
- + #endif
- /* reset usb core and usb phy */
- disable_irq(ui->irq);
- if (ui->in_lpm)
- usb_lpm_exit(ui);
- usb_vbus_offline(ui);
- usb_lpm_enter(ui);
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-01
- if ((ui->vbus_sn_notif) &&
- (ui->usb_state == USB_STATE_NOTATTACHED))
- msm_pm_app_enable_usb_ldo(0);
- + #endif
- ui->state = USB_STATE_OFFLINE;
- enable_irq(ui->irq);
- switch_set_state(&ui->sdev, 0);
- @@ -2487,10 +2580,12 @@
- }
- if ((flags & USB_FLAG_RESUME) ||
- (flags & USB_FLAG_CONFIGURE)) {
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- int maxpower = usb_get_max_power(ui);
- if (maxpower > 0)
- msm_chg_usb_i_is_available(maxpower);
- + #endif
- if (flags & USB_FLAG_CONFIGURE)
- switch_set_state(&ui->sdev, 1);
- @@ -2518,9 +2613,11 @@
- goto reset;
- }
- usb_enable_pullup(ui);
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- schedule_delayed_work(
- &ui->chg_legacy_det,
- USB_CHG_DET_DELAY);
- + #endif
- pr_info("hsusb: OFFLINE -> ONLINE\n");
- enable_irq(ui->irq);
- break;
- @@ -2546,7 +2643,9 @@
- struct usb_info *ui = the_usb_info;
- if (ui && online) {
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-01
- msm_pm_app_enable_usb_ldo(1);
- + #endif
- usb_lpm_exit(ui);
- /* Turn on PHY comparators */
- if (!(ulpi_read(ui, 0x30) & 0x01))
- @@ -2685,6 +2784,7 @@
- enable_irq(ui->irq);
- }
- +#ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- static void usb_chg_stop(struct work_struct *w)
- {
- struct usb_info *ui = the_usb_info;
- @@ -2698,7 +2798,7 @@
- if (temp == USB_CHG_TYPE__SDP)
- msm_chg_usb_i_is_not_available();
- }
- -
- +#endif
- static void usb_vbus_online(struct usb_info *ui)
- {
- if (ui->in_lpm) {
- @@ -2797,12 +2897,12 @@
- struct usb_info *ui = the_usb_info;
- /* disable and re-enable the D+ pullup */
- - pr_info("hsusb: disable pullup\n");
- + printk("hml: hsusb disable pullup\n");
- usb_disable_pullup(ui);
- msleep(10);
- - pr_info("hsusb: enable pullup\n");
- + printk("hml:hsusb enable pullup\n");
- usb_enable_pullup(ui);
- }
- @@ -2871,7 +2971,7 @@
- {
- struct usb_info *ui = file->private_data;
- unsigned long flags;
- -
- + printk("hml: debug_write_reset start \n");
- spin_lock_irqsave(&ui->lock, flags);
- ui->flags |= USB_FLAG_RESET;
- queue_delayed_work(usb_work, &ui->work, 0);
- @@ -2992,6 +3092,160 @@
- usb_function_enable(name, enable);
- return size;
- }
- +/*
- +**HML_USB_004 add sysfs interface
- +*/
- +static ssize_t msm_hsusb_show_serialnumber(struct device *dev,
- + struct device_attribute *attr,
- + char *buf)
- +{
- + struct usb_info *ui = the_usb_info;
- + int i = 0;
- + if (ui->pdata->serial_number) {
- + i = scnprintf(buf, PAGE_SIZE,
- + "%s\n",
- + ui->pdata->serial_number);
- + }
- + return i;
- +}
- +
- +char g_serial_number[256] = {0};
- +
- +static ssize_t msm_hsusb_store_serialnumber(struct device *dev,
- + struct device_attribute *attr,
- + const char *buf, size_t size)
- +{
- + struct usb_info *ui = the_usb_info;
- + // reset iSerialNumber field for device descriptor
- + if (BIND_IN_USER == get_bind_mode()) {
- + strncpy(g_serial_number, buf, sizeof(g_serial_number));
- + g_serial_number[sizeof(g_serial_number) - 1] = 0;
- + ui->pdata->serial_number = g_serial_number;
- + if (ui->bound
- + && (desc_device.iSerialNumber >= 0)
- + && (desc_device.iSerialNumber < MAX_STRDESC_NUM)
- + && (ui->strdesc[desc_device.iSerialNumber])) {
- + char *tmp = kzalloc(strlen(g_serial_number) + 1, GFP_ATOMIC);
- + if(tmp) {
- + kfree(ui->strdesc[desc_device.iSerialNumber]);
- + ui->strdesc[desc_device.iSerialNumber] = tmp;
- + strcpy(ui->strdesc[desc_device.iSerialNumber], g_serial_number);
- + }
- + }
- + usb_try_to_bind();
- + }
- +
- + return size;
- +}
- +//HML_USB_004 end
- +/*
- +** HML_USB_20100513 debug enable sysfs interface
- +*/
- +static ssize_t msm_hsusb_show_debug_enable(struct device *dev,
- + struct device_attribute *attr,
- + char *buf)
- +{
- + int i = 0;
- + i = scnprintf(buf, PAGE_SIZE,
- + "%d\n",
- + get_debug_enabled());
- +
- + return i;
- +}
- +
- +static ssize_t msm_hsusb_store_debug_enable(struct device *dev,
- + struct device_attribute *attr,
- + const char *buf, size_t size)
- +{
- + unsigned long debug_enable;
- + if (!strict_strtoul(buf, 16, &debug_enable)) {
- + set_debug_enabled((int)debug_enable);
- + pr_info("%s: Requested g_debug_enabled = %d\n", __func__,g_debug_enabled);
- + }
- + else
- + pr_info("%s: strict_strtoul conversion failed\n", __func__);
- +
- + return size;
- +}
- +/*
- +** HML_USB_20100513 debug enable sysfs interface
- +*/
- +static ssize_t msm_hsusb_show_pidnv(struct device *dev,
- + struct device_attribute *attr,
- + char *buf)
- +{
- + int i = 0;
- + i = scnprintf(buf, PAGE_SIZE,
- + "nv %d\n",
- + msm_hsusb_get_set_usb_conf_nv_value(NV_BACK_LIGHT_I,0,NV_READ));
- + return i;
- +}
- +
- +static ssize_t msm_hsusb_set_pidnv(struct device *dev,
- + struct device_attribute *attr,
- + const char *buf, size_t size)
- +{
- + /* int i = 0; */
- + /* i = scnprintf(buf, PAGE_SIZE, */
- + /* "%s\n", */
- + /* use_default_pid?"use default pid":""); */
- +
- + /* return i; */
- + int value;
- + sscanf(buf, "%d", &value);
- + msm_hsusb_get_set_usb_conf_nv_value(NV_BACK_LIGHT_I,value,NV_WRITE);
- + return size;
- +}
- +
- +
- +
- +static ssize_t msm_hsusb_show_default_pid(struct device *dev,
- + struct device_attribute *attr,
- + char *buf)
- +{
- + /* int i = 0; */
- + /* i = scnprintf(buf, PAGE_SIZE, */
- + /* "%s\n", */
- + /* use_default_pid?"use default pid":""); */
- +
- + /* return i; */
- + return 0;
- +}
- +
- +
- +
- +static ssize_t msm_hsusb_store_default_pid(struct device *dev,
- + struct device_attribute *attr,
- + const char *buf, size_t size)
- +{
- + struct usb_info *ui = the_usb_info;
- + unsigned long default_pid;
- + int i;
- + if (1 != use_default_pid || BIND_IN_KERNEL == get_bind_mode() || ui->bound){
- + pr_info("usb:%s: use_default_pid %d bound %d\n", __func__,
- + use_default_pid,
- + ui->bound);
- + return size;
- + }
- + use_default_pid = 0;
- + if (!strict_strtoul(buf, 16, &default_pid)) {
- + //set_default_pid((int)default_pid);
- + pr_info("usb:%s: default_pid 0x%x\n", __func__,
- + (unsigned int)default_pid);
- + for (i = 0; i < ui->pdata->num_compositions; i++) {
- + if (ui->pdata->compositions[i].product_id
- + == default_pid) {
- + ui->composition = &ui->pdata->compositions[i];
- + break;
- + }
- + }
- + } else
- + pr_info("%s: strict_strtoul conversion failed\n", __func__);
- +
- + return size;
- +}
- +
- +// HML_USB_20100513 end
- static ssize_t msm_hsusb_show_compswitch(struct device *dev,
- struct device_attribute *attr,
- char *buf)
- @@ -3014,11 +3268,22 @@
- const char *buf, size_t size)
- {
- unsigned long pid;
- + int i,temp_pid;
- if (!strict_strtoul(buf, 16, &pid)) {
- pr_info("%s: Requested New Product id = %lx\n", __func__, pid);
- usb_switch_composition((unsigned short)pid);
- - } else
- + //HML_USB_004 restore pid in nv77
- + temp_pid = (int)pid;
- + printk("HML: restore pid =0x%x %d\n",temp_pid, ARRAY_SIZE(zte_usb_pid));
- + for(i = 0; i < ARRAY_SIZE(zte_usb_pid); i++){
- + if(temp_pid == zte_usb_pid[i])
- + break;
- + }
- + if(NV_WRITE_SUCCESS == msm_hsusb_get_set_usb_conf_nv_value(NV_BACK_LIGHT_I,i,NV_WRITE))
- + printk("HML: usb config restore successful\n");
- + }
- + else
- pr_info("%s: strict_strtoul conversion failed\n", __func__);
- return size;
- @@ -3082,6 +3347,16 @@
- static DEVICE_ATTR(state, 0664, msm_hsusb_show_state, NULL);
- static DEVICE_ATTR(lpm, 0664, msm_hsusb_show_lpm, NULL);
- static DEVICE_ATTR(speed, 0664, msm_hsusb_show_speed, NULL);
- +//HML_USB_004 add sysfs interface
- +static DEVICE_ATTR(serialnumber, 0664,
- + msm_hsusb_show_serialnumber, msm_hsusb_store_serialnumber);
- +//add debug and default pid interface
- +static DEVICE_ATTR(debug_enable, 0664,
- + msm_hsusb_show_debug_enable, msm_hsusb_store_debug_enable);
- +static DEVICE_ATTR(default_pid, 0664,
- + msm_hsusb_show_default_pid, msm_hsusb_store_default_pid);
- +static DEVICE_ATTR(pidnv, 0664,
- + msm_hsusb_show_pidnv, msm_hsusb_set_pidnv);
- static struct attribute *msm_hsusb_attrs[] = {
- &dev_attr_composition.attr,
- @@ -3090,6 +3365,10 @@
- &dev_attr_state.attr,
- &dev_attr_lpm.attr,
- &dev_attr_speed.attr,
- + &dev_attr_serialnumber.attr,//HML_USB_004 add sysfs interface
- + &dev_attr_debug_enable.attr,//HML_USB_004 add sysfs interface
- + &dev_attr_default_pid.attr,//HML_USB_004 add sysfs interface
- + &dev_attr_pidnv.attr,//HML_USB_004 add sysfs interface
- NULL,
- };
- static struct attribute_group msm_hsusb_attr_grp = {
- @@ -3109,13 +3388,14 @@
- \
- static DEVICE_ATTR(function, S_IRUGO, show_##function, NULL);
- +// HML_USB_004: change order of functions, and delete ethernet/rmnet, we don't support now!
- msm_hsusb_func_attr(diag, 0);
- -msm_hsusb_func_attr(adb, 1);
- -msm_hsusb_func_attr(modem, 2);
- -msm_hsusb_func_attr(nmea, 3);
- -msm_hsusb_func_attr(mass_storage, 4);
- -msm_hsusb_func_attr(ethernet, 5);
- -msm_hsusb_func_attr(rmnet, 6);
- +msm_hsusb_func_attr(modem, 1);
- +msm_hsusb_func_attr(nmea, 2);
- +msm_hsusb_func_attr(mass_storage, 3);
- +msm_hsusb_func_attr(adb, 4);
- +//msm_hsusb_func_attr(ethernet, 5);
- +//msm_hsusb_func_attr(rmnet, 6);
- static struct attribute *msm_hsusb_func_attrs[] = {
- &dev_attr_diag.attr,
- @@ -3123,8 +3403,8 @@
- &dev_attr_modem.attr,
- &dev_attr_nmea.attr,
- &dev_attr_mass_storage.attr,
- - &dev_attr_ethernet.attr,
- - &dev_attr_rmnet.attr,
- + //&dev_attr_ethernet.attr,
- + //&dev_attr_rmnet.attr,
- NULL,
- };
- @@ -3132,6 +3412,30 @@
- .name = "functions",
- .attrs = msm_hsusb_func_attrs,
- };
- +/*USB-HML-003: function used in usb_probe to indentity usb mode
- + * param:
- + * use_zte_config: if it's using zte signed pid list.
- +*/
- +static int usb_config_mode_by_nv(int use_zte_config)
- +{
- + int usb_conf_nv=0;
- + int rc=0;
- + int *usb_pid;
- + usb_pid = zte_usb_pid;
- +
- + usb_conf_nv = msm_hsusb_get_set_usb_conf_nv_value(NV_BACK_LIGHT_I,0,NV_READ);
- + printk("HML usb_probe: usb_conf_nv=%d, %d\n",
- + usb_conf_nv, ARRAY_SIZE(zte_usb_pid));
- + if (0 <= usb_conf_nv && usb_conf_nv < ARRAY_SIZE(zte_usb_pid)){
- + use_default_pid=0;
- + rc = usb_pid[usb_conf_nv];
- + } else {
- + rc = usb_pid[1]; //default adb +u port
- + use_default_pid=1;
- + }
- +
- + return rc;
- +}
- static int __init usb_probe(struct platform_device *pdev)
- {
- @@ -3184,7 +3488,29 @@
- ui->pdev = pdev;
- ui->pdata = pdev->dev.platform_data;
- -
- +
- + //HML_USB_004 add
- + set_bind_mode((0x0112==ui->pdata->zte_pid)? BIND_IN_KERNEL:BIND_IN_USER);
- + //hemulu add to switch usbmode
- + pid = ui->pdata->zte_pid;
- + if(0x112!=pid)//ZTE-USB-HML-02 start: if it is FTM mode do not read usb conf nv
- + {
- + //USB-HML-003 rpc read nv77 value to config usb mode.
- + pid = usb_config_mode_by_nv(1);
- + printk("HML usb_probe: pid=0x%x\n",pid);
- + if(0x0112==pid)//to unify comport number with ftm and download mode
- + {
- + ui->pdata->serial_number = 0;
- + }
- + }
- +
- + //ruanmeisi_20100528 if serial_number is not default,bind in kernel
- + if (NULL != ui->pdata->serial_number &&
- + 0 != strcmp(ui->pdata->serial_number, "ZTE-HSUSB")) {
- + set_bind_mode(BIND_IN_KERNEL);
- + }
- + //end
- +
- for (i = 0; i < ui->pdata->num_compositions; i++)
- if (ui->pdata->compositions[i].product_id == pid) {
- ui->composition = &ui->pdata->compositions[i];
- @@ -3457,7 +3783,9 @@
- /* rpc connect for phy_reset */
- msm_hsusb_rpc_connect();
- /* rpc connect for charging */
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-001
- msm_chg_rpc_connect();
- + #endif
- return platform_driver_register(&usb_driver);
- }
- @@ -3509,9 +3837,11 @@
- usb_debugfs_uninit();
- platform_driver_unregister(&usb_driver);
- msm_hsusb_rpc_close();
- + #ifdef CONFIG_HSU_CHARGER_TYPE_DETECT_ON_ARM11 //USB-HML-01
- msm_chg_rpc_close();
- msm_pm_app_unregister_vbus_sn(&msm_hsusb_set_vbus_state);
- msm_pm_app_rpc_deinit();
- + #endif
- }
- static void __exit usb_module_exit(void)
- diff -urB -x .git msm/drivers/video/Kconfig zte/drivers/video/Kconfig
- --- msm/drivers/video/Kconfig Mon Nov 1 13:46:22 2010
- +++ zte/drivers/video/Kconfig Wed Oct 13 18:13:24 2010
- @@ -2254,6 +2254,33 @@
- bool
- select FB_MSM_LCDC_PANEL
- default n
- +config FB_MSM_LCDC_HIMAX_WQVGA727
- + bool
- + select FB_MSM_LCDC_PANEL
- +config FB_MSM_LCDC_HIMAX_WQVGA722
- + bool
- + select FB_MSM_LCDC_PANEL
- +config FB_MSM_LCDC_LEAD_QVGA
- + bool
- + select FB_MSM_LCDC_PANEL
- + default n
- +config FB_MSM_LCDC_HIMAX_QVGA
- + bool
- + select FB_MSM_LCDC_PANEL
- + default n
- +config FB_MSM_LCDC_SAMSUNG_QVGA
- + bool
- + select FB_MSM_LCDC_PANEL
- + default n
- +config FB_MSM_LCDC_OLED_WVGA
- + bool
- + select FB_MSM_LCDC_PANEL
- + default n
- +
- +config FB_MSM_LCDC_LEAD_HVGA
- + bool
- + select FB_MSM_LCDC_PANEL
- + default n
- config FB_MSM_LCDC_SHARP_WVGA_PT
- bool
- @@ -2265,9 +2292,9 @@
- select FB_MSM_LCDC_PANEL
- default n
- -choice
- - prompt "LCD Panel"
- - default FB_MSM_MDDI_AUTO_DETECT
- +
- +menu "LCD Panel"
- +# default FB_MSM_MDDI_AUTO_DETECT
- config FB_MSM_LCDC_PRISM_WVGA_PANEL
- depends on FB_MSM_LCDC_HW
- @@ -2282,7 +2309,53 @@
- select FB_MSM_LCDC_GORDON_VGA
- ---help---
- Support for LCDC Gordon VGA (480x640) panel
- +config FB_MSM_LCDC_HIMAX_WQVGA_PANEL727
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC HiMax WQVGA Panel Joe"
- + select FB_MSM_LCDC_HIMAX_WQVGA727
- + ---help---
- + Support for LCDC HiMax WQVGA (400x240) panel
- +config FB_MSM_LCDC_HIMAX_WQVGA_PANEL722
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC HiMax WQVGA Panel Raise"
- + select FB_MSM_LCDC_HIMAX_WQVGA722
- + ---help---
- + Support for LCDC HiMax WQVGA (400x240) panel
- +config FB_MSM_LCDC_LEAD_QVGA_PANEL
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC Lead QVGA Panel"
- + select FB_MSM_LCDC_LEAD_QVGA
- + ---help---
- + Support for LCDC Lead QVGA (240x320) panel
- +config FB_MSM_LCDC_HIMAX_QVGA_PANEL
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC HIMAX QVGA Panel"
- + select FB_MSM_LCDC_HIMAX_QVGA
- + ---help---
- + Support for LCDC HIMAX QVGA (240x320) panel
- +
- +config FB_MSM_LCDC_SAMSUNG_QVGA_PANEL
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC SAMSUNG QVGA Panel"
- + select FB_MSM_LCDC_SAMSUNG_QVGA
- + ---help---
- + Support for LCDC SAMSUNG QVGA (240x320) panel
- +
- +config FB_MSM_LCDC_OLED_WVGA_PANEL
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC Oled WVGA Panel"
- + select FB_MSM_LCDC_OLED_WVGA
- + ---help---
- + Support for LCDC Samsung Oled WVGA (480x800) panel
- +
- +config FB_MSM_LCDC_LEAD_HVGA_PANEL
- + depends on FB_MSM_LCDC_HW
- + bool "LCDC LEAD HVGA Panel"
- + select FB_MSM_LCDC_LEAD_HVGA
- + ---help---
- + Support for LCDC LEAD TFT HVGA (320x480) panel
- +
- config FB_MSM_LCDC_TOSHIBA_WVGA_PT_PANEL
- depends on FB_MSM_LCDC_HW
- bool "LCDC Toshiba WVGA PT Panel"
- @@ -2356,7 +2429,7 @@
- bool "NONE"
- ---help---
- This will disable LCD panel
- -endchoice
- +endmenu
- choice
- prompt "Secondary LCD Panel"
- diff -urB -x .git msm/drivers/video/msm/Makefile zte/drivers/video/msm/Makefile
- --- msm/drivers/video/msm/Makefile Mon Nov 1 13:46:22 2010
- +++ zte/drivers/video/msm/Makefile Wed Oct 13 18:13:22 2010
- @@ -35,6 +35,7 @@
- obj-y += mdp_dma.o
- obj-y += mdp_dma_s.o
- obj-y += mdp_vsync.o
- +obj-y += mdp_dma_lcdc.o
- obj-y += mdp_cursor.o
- obj-y += mdp_dma_tv.o
- @@ -87,7 +88,15 @@
- obj-$(CONFIG_FB_MSM_LCDC_TOSHIBA_WVGA_PT) += lcdc_toshiba_wvga_pt.o
- obj-$(CONFIG_FB_MSM_LCDC_SHARP_WVGA_PT) += lcdc_sharp_wvga_pt.o
- obj-$(CONFIG_FB_MSM_HDMI_ADV7520_PANEL) += adv7520.o
- +obj-$(CONFIG_FB_MSM_LCDC_HIMAX_WQVGA727) += lcdc_panel_wqvga727.o
- +obj-$(CONFIG_FB_MSM_LCDC_HIMAX_WQVGA722) += lcdc_panel_wqvga722.o
- +obj-$(CONFIG_FB_MSM_LCDC_LEAD_QVGA) += lcdc_panel_qvga_lead.o
- +obj-$(CONFIG_FB_MSM_LCDC_HIMAX_QVGA) += lcdc_panel_qvga_himax.o
- +obj-$(CONFIG_FB_MSM_LCDC_SAMSUNG_QVGA) += lcdc_panel_qvga_samsung.o
- +obj-$(CONFIG_FB_MSM_LCDC_LEAD_HVGA) += lcdc_panel_hvga_lead.o
- +
- +obj-$(CONFIG_FB_MSM_LCDC_OLED_WVGA) += lcdc_panel_wvga_oled.o
- obj-$(CONFIG_FB_MSM_TVOUT_NTSC) += tv_ntsc.o
- obj-$(CONFIG_FB_MSM_TVOUT_PAL) += tv_pal.o
- diff -urB -x .git msm/drivers/video/msm/lcdc.c zte/drivers/video/msm/lcdc.c
- --- msm/drivers/video/msm/lcdc.c Mon Nov 1 14:21:30 2010
- +++ zte/drivers/video/msm/lcdc.c Mon Oct 18 10:22:08 2010
- @@ -118,8 +119,7 @@
- if (lcdc_pdata && lcdc_pdata->lcdc_power_save)
- lcdc_pdata->lcdc_power_save(0);
- - if (lcdc_pdata && lcdc_pdata->lcdc_gpio_config)
- - ret = lcdc_pdata->lcdc_gpio_config(0);
- +
- pm_qos_update_requirement(PM_QOS_SYSTEM_BUS_FREQ , "lcdc",
- PM_QOS_DEFAULT_VALUE);
- Only in zte/drivers/video/msm: lcdc_panel_hvga_lead.c
- Only in zte/drivers/video/msm: lcdc_panel_qvga_himax.c
- Only in zte/drivers/video/msm: lcdc_panel_qvga_lead.c
- Only in zte/drivers/video/msm: lcdc_panel_qvga_samsung.c
- Only in zte/drivers/video/msm: lcdc_panel_wqvga722.c
- Only in zte/drivers/video/msm: lcdc_panel_wqvga727.c
- Only in zte/drivers/video/msm: lcdc_panel_wvga_oled.c
- diff -urB -x .git msm/drivers/video/msm/logo.c zte/drivers/video/msm/logo.c
- --- msm/drivers/video/msm/logo.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/video/msm/logo.c Mon Oct 18 10:34:14 2010
- @@ -35,7 +36,7 @@
- while (count--)
- *ptr++ = val;
- }
- -
- +#ifndef CONFIG_ZTE_PLATFORM
- /* 565RLE image format: [count(2 bytes), rle(2 bytes)] */
- int load_565rle_image(char *filename)
- {
- @@ -95,4 +96,68 @@
- sys_close(fd);
- return err;
- }
- +#else
- +
- +int load_565rle_image(char *filename)
- +{
- + struct fb_info *info;
- + int fd, err = 0;
- + unsigned count, max;
- + unsigned short *data, *bits, *ptr;
- +
- + info = registered_fb[0];
- + if (!info) {
- + printk(KERN_WARNING "%s: Can not access framebuffer\n",
- + __func__);
- + return -ENODEV;
- + }
- +
- + fd = sys_open(filename, O_RDONLY, 0);
- + if (fd < 0) {
- + printk(KERN_WARNING "%s: Can not open %s\n",
- + __func__, filename);
- + return -ENOENT;
- + }
- +
- + max = fb_width(info) * fb_height(info);
- + printk(KERN_WARNING "LUYA!!!!max=%d\n",max);
- + count = (unsigned)sys_lseek(fd, (off_t)0, 2);
- + printk(KERN_WARNING "LUYA!!!!count=%d\n",count);
- +
- + if (count == 0) {
- + sys_close(fd);
- + err = -EIO;
- + goto err_logo_close_file;
- + }
- + sys_lseek(fd, (off_t)0, 0);
- + data = kmalloc(count, GFP_KERNEL);
- + if (!data) {
- + printk(KERN_WARNING "%s: Can not alloc data\n", __func__);
- + err = -ENOMEM;
- + goto err_logo_close_file;
- + }
- + if ((unsigned)sys_read(fd, (char *)data, count) != count) {
- + err = -EIO;
- + goto err_logo_free_data;
- + }
- +
- + ptr = data+35;
- + bits = (unsigned short *)(info->screen_base);
- + while (max > 0) {
- +
- + memset16(bits, ptr[0], 1 << 1);
- + bits += 1;
- + max -= 1;
- + ptr += 1;
- +
- + }
- +
- +err_logo_free_data:
- + kfree(data);
- +err_logo_close_file:
- + sys_close(fd);
- + return err;
- +}
- +#endif
- +
- EXPORT_SYMBOL(load_565rle_image);
- diff -urB -x .git msm/drivers/video/msm/mdp_dma_lcdc.c zte/drivers/video/msm/mdp_dma_lcdc.c
- --- msm/drivers/video/msm/mdp_dma_lcdc.c Mon Nov 1 13:46:22 2010
- +++ zte/drivers/video/msm/mdp_dma_lcdc.c Mon Oct 18 10:34:56 2010
- @@ -156,12 +157,23 @@
- buf = (uint8 *) fbi->fix.smem_start;
- buf += fbi->var.xoffset * bpp + fbi->var.yoffset * fbi->fix.line_length;
- +#ifdef CONFIG_ZTE_PLATFORM
- + dma2_cfg_reg = DMA_PACK_ALIGN_MSB | DMA_DITHER_EN | DMA_OUT_SEL_LCDC;
- +
- +#else
- dma2_cfg_reg = DMA_PACK_ALIGN_LSB | DMA_DITHER_EN | DMA_OUT_SEL_LCDC;
- +#endif
- if (mfd->fb_imgType == MDP_BGR_565)
- dma2_cfg_reg |= DMA_PACK_PATTERN_BGR;
- else
- + {
- + #ifdef CONFIG_FB_MSM_LCDC_OLED_WVGA
- + dma2_cfg_reg |= DMA_PACK_PATTERN_BGR;
- + #else
- dma2_cfg_reg |= DMA_PACK_PATTERN_RGB;
- + #endif
- + }
- if (bpp == 2)
- dma2_cfg_reg |= DMA_IBUF_FORMAT_RGB565;
- diff -urB -x .git msm/drivers/video/msm/msm_fb.c zte/drivers/video/msm/msm_fb.c
- --- msm/drivers/video/msm/msm_fb.c Mon Nov 1 14:29:40 2010
- +++ zte/drivers/video/msm/msm_fb.c Mon Oct 18 10:35:56 2010
- @@ -48,7 +48,7 @@
- #include "mdp4.h"
- #ifdef CONFIG_FB_MSM_LOGO
- -#define INIT_IMAGE_FILE "/logo.rle"
- +#define INIT_IMAGE_FILE "/logo.bmp"
- extern int load_565rle_image(char *filename);
- #endif
- @@ -237,7 +237,7 @@
- return -ENOMEM;
- mfd->panel_info.frame_count = 0;
- - mfd->bl_level = mfd->panel_info.bl_max;
- + mfd->bl_level = mfd->panel_info.bl_max/4;
- #ifdef CONFIG_FB_MSM_OVERLAY
- mfd->overlay_play_enable = 1;
- #endif
- @@ -523,9 +523,9 @@
- switch (blank_mode) {
- case FB_BLANK_UNBLANK:
- if (!mfd->panel_power_on) {
- - mdelay(100);
- ret = pdata->on(mfd->pdev);
- if (ret == 0) {
- + mdelay(30);
- mfd->panel_power_on = TRUE;
- msm_fb_set_backlight(mfd,
- @@ -555,14 +555,13 @@
- mfd->op_enable = FALSE;
- curr_pwr_state = mfd->panel_power_on;
- + msm_fb_set_backlight(mfd, 0, 0);
- mfd->panel_power_on = FALSE;
- mdelay(100);
- ret = pdata->off(mfd->pdev);
- if (ret)
- mfd->panel_power_on = curr_pwr_state;
- -
- - msm_fb_set_backlight(mfd, 0, 0);
- mfd->op_enable = TRUE;
- }
- break;
- @@ -871,9 +870,6 @@
- is writing directly to fb0, the framebuffer pitch
- also needs to be 32 pixel aligned */
- - if (mfd->index == 0)
- - fix->line_length = ALIGN(panel_info->xres, 32) * bpp;
- - else
- fix->line_length = panel_info->xres * bpp;
- fix->smem_len = fix->line_length * panel_info->yres * mfd->fb_page;
- Only in zte/include/asm-arm: mach-types.h
- Only in zte/include/linux: compile.h
- Only in zte/include/linux/i2c: akm8973.h
- diff -urB -x .git msm/include/linux/input.h zte/include/linux/input.h
- --- msm/include/linux/input.h Mon Nov 1 13:46:23 2010
- +++ zte/include/linux/input.h Mon Oct 18 13:50:40 2010
- @@ -374,7 +374,13 @@
- #define KEY_BRIGHTNESS_ZERO 244 /* brightness off, use ambient */
- #define KEY_DISPLAY_OFF 245 /* display device to off state */
- -#define KEY_WIMAX 246
- +#if defined(CONFIG_MACH_SMOOTH)
- +#define KEY_FLIP_UP 246
- +#define KEY_FLIP_DOWN 247
- +#define KEY_WIMAX 248
- +#else
- +#define KEY_WIMAX 246
- +#endif
- /* Range 248 - 255 is reserved for special needs of AT keyboard driver */
- Only in zte/include/linux: lis302dl.h
- diff -urB -x .git msm/include/linux/mmc/host.h zte/include/linux/mmc/host.h
- --- msm/include/linux/mmc/host.h Mon Nov 1 13:46:23 2010
- +++ zte/include/linux/mmc/host.h Mon Oct 18 10:47:22 2010
- @@ -148,8 +148,10 @@
- struct mmc_card *card; /* device attached to this host */
- wait_queue_head_t wq;
- -
- - struct delayed_work detect;
- +
- + struct task_struct *claimer;
- + int claim_cnt;
- + struct delayed_work detect;
- const struct mmc_bus_ops *bus_ops; /* current bus driver */
- unsigned int bus_refs; /* reference counter */
- @@ -180,7 +182,8 @@
- int idle_timeout;
- unsigned long auto_suspend_state;
- #endif
- - unsigned long private[0] ____cacheline_aligned;
- + int last_suspend_error;
- + unsigned long private[0] ____cacheline_aligned;
- };
- extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
- diff -urB -x .git msm/include/linux/msm_audio.h zte/include/linux/msm_audio.h
- --- msm/include/linux/msm_audio.h Mon Nov 1 13:46:23 2010
- +++ zte/include/linux/msm_audio.h Mon Oct 18 13:51:30 2010
- @@ -227,6 +228,7 @@
- #define SND_AVC_CTL _IOW(SND_IOCTL_MAGIC, 6, unsigned *)
- #define SND_AGC_CTL _IOW(SND_IOCTL_MAGIC, 7, unsigned *)
- +#define SND_SET_AUDIO_LOOPBACK _IOW(SND_IOCTL_MAGIC, 8, unsigned *)
- struct msm_audio_pcm_config {
- uint32_t pcm_feedback; /* 0 - disable > 0 - enable */
- diff -urB -x .git msm/include/linux/netfilter_ipv4/ipt_ecn.h zte/include/linux/netfilter_ipv4/ipt_ecn.h
- --- msm/include/linux/netfilter_ipv4/ipt_ecn.h Mon Nov 1 12:10:14 2010
- +++ zte/include/linux/netfilter_ipv4/ipt_ecn.h Mon Oct 18 10:48:54 2010
- @@ -18,8 +18,7 @@
- #define IPT_ECN_OP_MATCH_MASK 0xce
- -/* match info */
- -struct ipt_ecn_info {
- + struct ipt_ecn_info {
- u_int8_t operation;
- u_int8_t invert;
- u_int8_t ip_ect;
- diff -urB -x .git msm/include/linux/netfilter_ipv4/ipt_ttl.h zte/include/linux/netfilter_ipv4/ipt_ttl.h
- --- msm/include/linux/netfilter_ipv4/ipt_ttl.h Mon Nov 1 12:10:14 2010
- +++ zte/include/linux/netfilter_ipv4/ipt_ttl.h Mon Oct 18 13:49:20 2010
- @@ -5,10 +5,10 @@
- #define _IPT_TTL_H
- enum {
- - IPT_TTL_EQ = 0, /* equals */
- - IPT_TTL_NE, /* not equals */
- - IPT_TTL_LT, /* less than */
- - IPT_TTL_GT, /* greater than */
- + IPT_TTL_EQ = 0,
- + IPT_TTL_NE,
- + IPT_TTL_LT,
- + IPT_TTL_GT,
- };
- diff -urB -x .git msm/include/linux/netfilter_ipv6/ip6t_hl.h zte/include/linux/netfilter_ipv6/ip6t_hl.h
- --- msm/include/linux/netfilter_ipv6/ip6t_hl.h Mon Nov 1 12:10:14 2010
- +++ zte/include/linux/netfilter_ipv6/ip6t_hl.h Mon Oct 18 10:49:36 2010
- @@ -6,10 +6,10 @@
- #define _IP6T_HL_H
- enum {
- - IP6T_HL_EQ = 0, /* equals */
- - IP6T_HL_NE, /* not equals */
- - IP6T_HL_LT, /* less than */
- - IP6T_HL_GT, /* greater than */
- + IP6T_HL_EQ = 0,
- + IP6T_HL_NE,
- + IP6T_HL_LT,
- + IP6T_HL_GT,
- };
- Only in zte/include/linux: zte_memlog.h
- diff -urB -x .git msm/include/media/msm_camera.h zte/include/media/msm_camera.h
- --- msm/include/media/msm_camera.h Mon Nov 1 13:46:23 2010
- +++ zte/include/media/msm_camera.h Mon Oct 18 10:51:10 2010
- @@ -15,6 +15,7 @@
- * 02110-1301, USA.
- *
- */
- +
- #ifndef __LINUX_MSM_CAMERA_H
- #define __LINUX_MSM_CAMERA_H
- @@ -106,6 +107,10 @@
- #define MSM_CAM_IOCTL_AF_CTRL_DONE \
- _IOW(MSM_CAM_IOCTL_MAGIC, 26, struct msm_ctrl_cmt_t *)
- +
- +#define MSM_CAM_IOCTL_FLASH_LED_ON_OFF_CFG \
- + _IOW(MSM_CAM_IOCTL_MAGIC, 27, uint32_t *)
- +
- #define MAX_SENSOR_NUM 3
- #define MAX_SENSOR_NAME 32
- @@ -175,26 +180,26 @@
- void *value;
- };
- -#define CMD_GENERAL 0
- -#define CMD_AXI_CFG_OUT1 1
- +#define CMD_GENERAL 0
- +#define CMD_AXI_CFG_OUT1 1
- #define CMD_AXI_CFG_SNAP_O1_AND_O2 2
- -#define CMD_AXI_CFG_OUT2 3
- -#define CMD_PICT_T_AXI_CFG 4
- -#define CMD_PICT_M_AXI_CFG 5
- +#define CMD_AXI_CFG_OUT2 3
- +#define CMD_PICT_T_AXI_CFG 4
- +#define CMD_PICT_M_AXI_CFG 5
- #define CMD_RAW_PICT_AXI_CFG 6
- #define CMD_FRAME_BUF_RELEASE 7
- -#define CMD_PREV_BUF_CFG 8
- +#define CMD_PREV_BUF_CFG 8
- #define CMD_SNAP_BUF_RELEASE 9
- -#define CMD_SNAP_BUF_CFG 10
- -#define CMD_STATS_DISABLE 11
- +#define CMD_SNAP_BUF_CFG 10
- +#define CMD_STATS_DISABLE 11
- #define CMD_STATS_AEC_AWB_ENABLE 12
- -#define CMD_STATS_AF_ENABLE 13
- +#define CMD_STATS_AF_ENABLE 13
- #define CMD_STATS_AEC_ENABLE 14
- #define CMD_STATS_AWB_ENABLE 15
- -#define CMD_STATS_ENABLE 16
- +#define CMD_STATS_ENABLE 16
- -#define CMD_STATS_AXI_CFG 17
- +#define CMD_STATS_AXI_CFG 17
- #define CMD_STATS_AEC_AXI_CFG 18
- #define CMD_STATS_AF_AXI_CFG 19
- #define CMD_STATS_AWB_AXI_CFG 20
- @@ -214,9 +219,9 @@
- #define UPDATE_STATS_INVALID 33
- #define CMD_AXI_CFG_SNAP_GEMINI 34
- -#define CMD_AXI_CFG_SNAP 35
- -#define CMD_AXI_CFG_PREVIEW 36
- -#define CMD_AXI_CFG_VIDEO 37
- +#define CMD_AXI_CFG_SNAP 35
- +#define CMD_AXI_CFG_PREVIEW 36
- +#define CMD_AXI_CFG_VIDEO 37
- #define CMD_STATS_IHIST_ENABLE 38
- #define CMD_STATS_RS_ENABLE 39
- @@ -381,8 +386,13 @@
- #define CFG_GET_PICT_P_PL 25
- #define CFG_GET_AF_MAX_STEPS 26
- #define CFG_GET_PICT_MAX_EXP_LC 27
- + #define CFG_SET_SATURATION 28
- +#define CFG_SET_SHARPNESS 29
- +
- +#define CFG_SET_AF 30
- +#define CFG_SET_ISO 31
- +#define CFG_MAX 32
- #define CFG_SEND_WB_INFO 28
- -#define CFG_MAX 29
- #define MOVE_NEAR 0
- #define MOVE_FAR 1
- @@ -404,7 +414,70 @@
- #define CAMERA_EFFECT_WHITEBOARD 6
- #define CAMERA_EFFECT_BLACKBOARD 7
- #define CAMERA_EFFECT_AQUA 8
- -#define CAMERA_EFFECT_MAX 9
- +#define CAMERA_EFFECT_BULISH 9
- +#define CAMERA_EFFECT_REDDISH 10
- +#define CAMERA_EFFECT_GREENISH 11
- +#define CAMERA_EFFECT_MAX 12
- +
- +#define CAMERA_WB_MODE_AWB 1
- +#define CAMERA_WB_MODE_CUSTOM 2
- +#define CAMERA_WB_MODE_INCANDESCENT 3
- +#define CAMERA_WB_MODE_FLUORESCENT 4
- +#define CAMERA_WB_MODE_SUNLIGHT 5
- +#define CAMERA_WB_MODE_CLOUDY 6
- +#define CAMERA_WB_MODE_NIGHT 7
- +#define CAMERA_WB_MODE_SHADE 8
- +#define CAMERA_WB_MODE_MAX 9
- +
- +#define CAMERA_BRIGHTNESS_0 0
- +#define CAMERA_BRIGHTNESS_1 1
- +#define CAMERA_BRIGHTNESS_2 2
- +#define CAMERA_BRIGHTNESS_3 3
- +#define CAMERA_BRIGHTNESS_4 4
- +#define CAMERA_BRIGHTNESS_5 5
- +#define CAMERA_BRIGHTNESS_6 6
- +#define CAMERA_BRIGHTNESS_MAX 7
- +
- +#define CAMERA_CONTRAST_0 0
- +#define CAMERA_CONTRAST_1 1
- +#define CAMERA_CONTRAST_2 2
- +#define CAMERA_CONTRAST_3 3
- +#define CAMERA_CONTRAST_4 4
- +#define CAMERA_CONTRAST_MAX 5
- +
- +#define CAMERA_SATURATION_0 0
- +#define CAMERA_SATURATION_1 1
- +#define CAMERA_SATURATION_2 2
- +#define CAMERA_SATURATION_3 3
- +#define CAMERA_SATURATION_4 4
- +#define CAMERA_SATURATION_MAX 5
- +
- +#define CAMERA_ISO_SET_AUTO 0
- +#define CAMERA_ISO_SET_HJR 1
- +#define CAMERA_ISO_SET_100 2
- +#define CAMERA_ISO_SET_200 3
- +#define CAMERA_ISO_SET_400 4
- +#define CAMERA_ISO_SET_800 5
- +#define CAMERA_ISO_SET_MAX 6
- +
- +#define CAMERA_ANTIBANDING_SET_OFF 0
- +#define CAMERA_ANTIBANDING_SET_60HZ 1
- +#define CAMERA_ANTIBANDING_SET_50HZ 2
- +#define CAMERA_ANTIBANDING_SET_AUTO 3
- +#define CAMERA_ANTIBANDING_MAX 4
- +
- +#define CAMERA_SHARPNESS_0 0
- +#define CAMERA_SHARPNESS_1 1
- +#define CAMERA_SHARPNESS_2 2
- +#define CAMERA_SHARPNESS_3 3
- +#define CAMERA_SHARPNESS_4 4
- +#define CAMERA_SHARPNESS_5 5
- +#define CAMERA_SHARPNESS_6 6
- +#define CAMERA_SHARPNESS_7 7
- +#define CAMERA_SHARPNESS_8 8
- +#define CAMERA_SHARPNESS_9 9
- +#define CAMERA_SHARPNESS_10 10
- +#define CAMERA_SHARPNESS_MAX 11
- struct sensor_pict_fps {
- uint16_t prevfps;
- @@ -446,6 +519,17 @@
- uint16_t pictp_pl;
- uint32_t pict_max_exp_lc;
- uint16_t p_fps;
- +
- +
- + int8_t wb_mode;
- + int8_t brightness;
- + int8_t contrast;
- + int8_t saturation;
- + int8_t sharpness;
- + int8_t iso_val;
- + int8_t antibanding;
- + int8_t lensshading;
- +
- struct sensor_pict_fps gfps;
- struct exp_gain_cfg exp_gain;
- struct focus_cfg focus;
- Only in zte/kernel: config_data.gz
- Only in zte/kernel: config_data.h
- Only in zte/kernel: timeconst.h
- Only in zte/lib: crc32table.h
- Only in zte/lib: gen_crc32table
- diff -urB -x .git msm/net/ipv4/netfilter/ipt_ecn.c zte/net/ipv4/netfilter/ipt_ecn.c
- --- msm/net/ipv4/netfilter/ipt_ecn.c Mon Nov 1 12:10:18 2010
- +++ zte/net/ipv4/netfilter/ipt_ecn.c Mon Oct 18 10:56:38 2010
- @@ -35,9 +35,7 @@
- struct tcphdr _tcph;
- const struct tcphdr *th;
- - /* In practice, TCP match does this, so can't fail. But let's
- - * be good citizens.
- - */
- +
- th = skb_header_pointer(skb, ip_hdrlen(skb), sizeof(_tcph), &_tcph);
- if (th == NULL) {
- *hotdrop = false;
- diff -urB -x .git msm/net/ipv6/af_inet6.c zte/net/ipv6/af_inet6.c
- --- msm/net/ipv6/af_inet6.c Mon Nov 1 13:46:23 2010
- +++ zte/net/ipv6/af_inet6.c Mon Oct 18 10:57:36 2010
- @@ -88,9 +88,10 @@
- }
- #ifdef CONFIG_ANDROID_PARANOID_NETWORK
- +
- static inline int current_has_network(void)
- {
- - return (!current->euid || in_egroup_p(AID_INET) ||
- + return (!current_euid() || in_egroup_p(AID_INET) ||
- in_egroup_p(AID_NET_RAW));
- }
- static inline int current_has_cap(int cap)
- @@ -98,7 +99,7 @@
- if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))
- return 1;
- return capable(cap);
- -}
- +}
- # else
- static inline int current_has_network(void)
- {
- diff -urB -x .git msm/net/ipv6/netfilter/ip6t_hl.c zte/net/ipv6/netfilter/ip6t_hl.c
- --- msm/net/ipv6/netfilter/ip6t_hl.c Mon Nov 1 12:10:18 2010
- +++ zte/net/ipv6/netfilter/ip6t_hl.c Mon Oct 18 10:58:26 2010
- @@ -1,12 +1,4 @@
- -/* Hop Limit matching module */
- -/* (C) 2001-2002 Maciej Soltysiak <solt@dns.toxicfilms.tv>
- - * Based on HW's ttl module
- - *
- - * This program is free software; you can redistribute it and/or modify
- - * it under the terms of the GNU General Public License version 2 as
- - * published by the Free Software Foundation.
- - */
- #include <linux/ipv6.h>
- #include <linux/module.h>
- diff -urB -x .git msm/scripts/Makefile.clean zte/scripts/Makefile.clean
- --- msm/scripts/Makefile.clean Mon Nov 1 12:10:20 2010
- +++ zte/scripts/Makefile.clean Tue Oct 26 16:54:52 2010
- @@ -14,7 +14,8 @@
- # The filename Kbuild has precedence over Makefile
- kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
- -include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
- +#include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
- +include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild)
- # Figure out what we need to build from the various variables
- # ==========================================================================
- Only in zte/scripts: Makefile.clean.bak
- Only in zte/scripts/basic: docproc
- Only in zte/scripts/basic: fixdep
- Only in zte/scripts/basic: hash
- Only in zte/scripts: bin2c
- Only in zte/scripts: conmakehash
- Only in zte/scripts: ihex2fw
- Only in zte/scripts: kallsyms
- Only in zte/scripts/kconfig: conf
- Only in zte/scripts/kconfig: lex.zconf.c
- Only in zte/scripts/kconfig: zconf.hash.c
- Only in zte/scripts/kconfig: zconf.tab.c
- Only in zte/scripts/mod: elfconfig.h
- Only in zte/scripts/mod: mk_elfconfig
- Only in zte/scripts/mod: modpost
- Only in zte/usr: gen_init_cpio
- Only in zte/usr: initramfs_data.cpio.gz
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement