|
From: <z7...@us...> - 2007-01-23 18:09:32
|
Revision: 776
http://svn.sourceforge.net/hackndev/?rev=776&view=rev
Author: z72ka
Date: 2007-01-23 10:08:22 -0800 (Tue, 23 Jan 2007)
Log Message:
-----------
Palmz72: - Partially fixed problems with old LCD panels
- new power management driver (suspend/resume support)
- clear code (for lucidity)
Modified Paths:
--------------
linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c
linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_ac97.c
linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c
Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c
===================================================================
--- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c 2007-01-23 09:53:18 UTC (rev 775)
+++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72.c 2007-01-23 18:08:22 UTC (rev 776)
@@ -1,12 +1,12 @@
-/*
- * Hardware definitions for Palm Zire 72
- *
- * Authors:
- * Vladimir "Farcaller" Pouzanov <far...@gm...>
- * Sergey Lapin <sla...@gm...>
- * Alex Osborne <bob...@gm...>
- * Jan Herman <2h...@se...>
- */
+/****************************************************************
+ * Hardware definitions for PalmOne Zire 72 *
+ * *
+ * Authors: *
+ * Vladimir "Farcaller" Pouzanov <far...@gm...> *
+ * Sergey Lapin <sla...@gm...> *
+ * Alex Osborne <bob...@gm...> *
+ * Jan Herman <2h...@se...> *
+ ****************************************************************/
#include <linux/kernel.h>
#include <linux/init.h>
@@ -50,34 +50,26 @@
#define DEBUG
-#define IR_TRANSCEIVER_ON \
- SET_HX4700_GPIO_N(IR_ON, 1)
-
-#define IR_TRANSCEIVER_OFF \
- SET_HX4700_GPIO_N(IR_ON, 0)
-
-
-/**
- * SD/MMC card controller
- */
+/**************************
+ * SD/MMC card controller *
+ **************************/
static int palmz72_mci_init(struct device *dev, irqreturn_t (*palmz72_detect_int)(int, void *, struct pt_regs *), void *data)
{
int err;
- /**
+ /*
* Setup an interrupt for detecting card insert/remove events
*/
set_irq_type(IRQ_GPIO_PALMZ72_SD_DETECT_N, IRQT_BOTHEDGE);
err = request_irq(IRQ_GPIO_PALMZ72_SD_DETECT_N, palmz72_detect_int,
- SA_INTERRUPT, "SD/MMC card detect", data);
+ SA_INTERRUPT, "SD/MMC card detected", data);
if(err) {
printk(KERN_ERR "palmz72_mci_init: cannot request SD/MMC card detect IRQ\n");
return -1;
}
-
printk("palmz72_mci_init: irq registered\n");
return 0;
@@ -96,14 +88,18 @@
};
-/* * LED */
+/*******
+ * LED *
+ *******/
-static struct platform_device palmz72led_device = {
+static struct platform_device palmz72_led_device = {
.name = "palmz72-led",
.id = -1,
};
-/* USB */
+/*******
+ * USB *
+ *******/
static int palmz72_udc_is_connected(void)
{
@@ -138,34 +134,34 @@
.udc_command = palmz72_udc_command,
};
-/*
- * Keypad
- */
+/**********
+ * Keypad *
+ **********/
static struct pxa27x_keyboard_platform_data palmz72_kbd_data = {
.nr_rows = 4,
.nr_cols = 3,
.keycodes = {
{ /* row 0 */
- KEY_POWER, /* Power KEY */
- KEY_F13, /* Photos */
- KEY_ENTER, /* DPAD Center*/
+ KEY_POWER, /* Power key */
+ KEY_F13, /* Photos */
+ KEY_ENTER, /* DPAD Center */
},
{ /* row 1 */
- KEY_F9, /* Calendar*/
- KEY_F10, /* Contacts */
- KEY_F12, /* Media */
+ KEY_F9, /* Calendar */
+ KEY_F10, /* Contacts */
+ KEY_F12, /* Media */
},
{ /* row 2 */
- KEY_UP, /* D-PAD UP*/
- KEY_V, /* unused */
- KEY_DOWN, /* D-PAD DOWN */
+ KEY_UP, /* D-PAD UP */
+ 0, /* unused */
+ KEY_DOWN, /* D-PAD DOWN */
},
{
/* row 3 */
- KEY_RIGHT, /* D-PAD RIGHT */
- KEY_S, /* ?? */
- KEY_LEFT, /* D-PAD LEFT */
+ KEY_RIGHT, /* D-PAD RIGHT */
+ 0, /* unused */
+ KEY_LEFT, /* D-PAD LEFT */
},
},
.gpio_modes = {
@@ -189,7 +185,9 @@
};
-/* IRDA */
+/********
+ * IRDA *
+ ********/
static void
palmz72_irda_configure (struct uart_pxa_port *up, int enable)
@@ -204,15 +202,9 @@
/* configure STUART to for SIR */
STISR = STISR_XMODE | STISR_RCVEIR | STISR_RXPL;
GPSR(91) = GPIO_bit(91);
-
-// STIER = STIER | IER_UUE;
- //IR_TRANSCEIVER_ON;
} else {
STISR = 0;
-// GPCR(91) = GPIO_bit(91);
-// STIER = STIER & ~IER_UUE;
- //IR_TRANSCEIVER_OFF;
- }
+ }
}
static void
@@ -236,9 +228,7 @@
if (new_stisr != old_stisr) {
while (!(STLSR & LSR_TEMT))
;
- //IR_TRANSCEIVER_OFF;
STISR = new_stisr;
- //IR_TRANSCEIVER_ON;
}
}
@@ -256,9 +246,9 @@
.get_txrx = palmz72_irda_get_txrx,
};
-/**
- * AC97 audio controller
- */
+/*************************
+ * AC97 audio controller *
+ *************************/
static pxa2xx_audio_ops_t palmz72_audio_ops = {
@@ -280,9 +270,9 @@
-/**
- * Backlight
- */
+/*************
+ * Backlight *
+ *************/
#define PALMZ72_MAX_INTENSITY 0x100
#define PALMZ72_DEFAULT_INTENSITY 0x7E
@@ -304,33 +294,64 @@
},
};
-static struct platform_device *devices[] __initdata = {
- &palmz72_ac97,
- &palmz72_backlight,
- &palmz72_keypad,
- &palmz72led_device,
-};
-/* framebuffer */
+/***************
+ * framebuffer *
+ ***************/
+
static struct pxafb_mach_info palmz72lcd __initdata = {
- .pixclock = 80000,
+
+ /* Dump at 94000000 to 9400000c
+ LCCR1: 1b070d3f: 1b = 27 = left_margin
+ 07 = 7 = right_margin
+ 0d = 13 = hsync_lenght
+ LCCR2: 0708013f: 07 = 7 = upper_margin
+ 08 = 8 = lower_margin
+ 01 = 1 = vsync_lenght
+ */
+
+ .pixclock = 0,
.xres = 320,
.yres = 320,
.bpp = 16,
- .hsync_len = 4,
+ .hsync_len = 6, // This value is optimized for older problematic LCD panels
.left_margin = 27,
.right_margin = 7,
.vsync_len = 1,
- .upper_margin = 8,
- .lower_margin = 7,
+ .upper_margin = 6, // This value is optimized for older problematic LCD panels
+ .lower_margin = 9, // This value is optimized for older problematic LCD panels
.sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT,
.lccr0 = 0x07B008F9,
- .lccr3 = 0x03700007,
+ .lccr3 = 0x03700007,
.pxafb_backlight_power = NULL,
};
+/********************
+ * Power Management *
+ ********************/
+
+struct platform_device palmz72_pm = {
+ .name = "palmz72-pm",
+ .id = -1,
+ .dev = {
+ .platform_data = NULL,
+ },
+};
+
+/****************
+ * Init Machine *
+ ****************/
+
+static struct platform_device *devices[] __initdata = {
+ &palmz72_ac97,
+ &palmz72_pm,
+ &palmz72_backlight,
+ &palmz72_keypad,
+ &palmz72_led_device,
+};
+
static void __init palmz72_init(void)
{
GCR &= ~GCR_PRIRDY_IEN;
@@ -346,10 +367,7 @@
pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
-
- // testing
-// GPSR(91) = GPIO_bit(91);
-
+
switch(palmz72lcd.bpp)
{
case 8:
@@ -359,29 +377,22 @@
palmz72lcd.lccr3=0x04700007;
break;
}
-
-#ifdef CONFIG_PM
- extern struct pxa_ll_pm_ops palmz72_ll_pm_ops;
- pxa_pm_set_ll_ops(&palmz72_ll_pm_ops);
-#endif
+
set_pxa_fb_info(&palmz72lcd);
pxa_set_mci_info( &palmz72_mci_platform_data );
pxa_set_udc_info(&palmz72_udc_mach_info );
stuart_device.dev.platform_data = &palmz72_pxa_irda_funcs;
platform_add_devices( devices, ARRAY_SIZE(devices) );
-#if 0
-#ifdef EARLY_SIR_CONSOLE
- palmlz72_irda_configure (NULL, 1);
- palmlz72_irda_set_txrx (NULL, PXA_SERIAL_TX);
-#endif
-#endif
-// LED_OFF;
}
MACHINE_START(PALMZ72, "Palm Zire 72")
- /* Maintainer: Vladimir Pouzanov <far...@gm...> */
- /* Maintainer: Sergey Lapin <sla...@gm...> */
- /* Maintainer: Jan Herman <2h...@se...> */
+
+ /********************************************************/
+ /* Maintainers: Vladimir Pouzanov <far...@gm...> */
+ /* Sergey Lapin <sla...@gm...> */
+ /* Jan Herman <2h...@se...> */
+ /********************************************************/
+
.boot_params = 0xa0000100,
.phys_io = 0x40000000,
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_ac97.c
===================================================================
--- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_ac97.c 2007-01-23 09:53:18 UTC (rev 775)
+++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_ac97.c 2007-01-23 18:08:22 UTC (rev 776)
@@ -1,11 +1,11 @@
-/*
- * linux/arch/arm/mach-pxa/palmz72/palmz72_ac97.c
- *
- * Touchscreen/battery driver for Palm Zire 72 WM9712 AC97 codec
- * Author: Jan Herman <2h...@se...>
- * Based on palmld_ac97.c code from Alex Osborne
- *
- */
+/************************************************************************
+ * linux/arch/arm/mach-pxa/palmz72/palmz72_ac97.c *
+ * *
+ * Touchscreen/battery driver for Palm Zire 72 WM9712 AC97 codec *
+ * Author: Jan Herman <2h...@se...> *
+ * Based on palmld_ac97.c code from Alex Osborne *
+ * *
+ ************************************************************************/
#include <linux/kernel.h>
@@ -54,7 +54,9 @@
#define palmz72_ac97_WORK_QUEUE_NAME "palmz72_ac97_workqueue"
-/* module parameters */
+/*********************
+ * Module parameters *
+ *********************/
static int ptrsh = DEFAULT_PRESSURE_TRESHOLD;
module_param(ptrsh, int, 0);
@@ -91,9 +93,9 @@
static int previous_voltage;
static u16 d2base;
-/*
- * ac97 codec
- */
+/**************
+ * ac97 codec *
+ **************/
void wm97xx_gpio_func(int gpio, int func)
{
@@ -239,7 +241,7 @@
polarity = ac97->bus->ops->read(ac97, 0x4e);
if(polarity & levels & WM97XX_GPIO_13) {
- // power up digitiser:
+ /* power up digitiser: */
down(&digitiser_sem);
wm97xx_set_digitiser_power(WM97XX_PRP_DET_DIG);
@@ -304,7 +306,7 @@
wm97xx_gpio_mode(WM97XX_GPIO_13, WM97XX_GPIO_OUT, WM97XX_GPIO_POL_HIGH,
WM97XX_GPIO_STICKY, WM97XX_GPIO_WAKE);
- // setup work queue
+ /* setup work queue */
palmz72_ac97_workqueue = create_workqueue(palmz72_ac97_WORK_QUEUE_NAME);
INIT_WORK(&palmz72_ac97_irq_task, palmz72_ac97_irq_work, dev);
@@ -315,7 +317,9 @@
-/* battery */
+/***********
+ * Battery *
+ ***********/
void palmz72_battery_read_adc(int force)
@@ -353,7 +357,10 @@
return PALMZ72_BAT_MAX_VOLTAGE; /* mV */
}
-// V-batt = ADCSEL_BMON * 1,889 + 767,8 [mV]
+/*
+ This formula is based on battery life of my battery 1100mAh. Original battery in Zire72 is Li-On 920mAh
+ V_batt = ADCSEL_BMON * 1,889 + 767,8 [mV]
+*/
int palmz72_battery_get_voltage(struct battery *b)
{
@@ -378,7 +385,6 @@
return BATTERY_STATUS_UNKNOWN;
if (ac_connected || usb_connected){
- // TODO: ok maybe this is too stupid ... to be reviewed
if ( ( current_voltage > previous_voltage ) || (current_voltage <= PALMZ72_BAT_MAX_VOLTAGE) )
return BATTERY_STATUS_CHARGING;
return BATTERY_STATUS_NOT_CHARGING;
@@ -401,7 +407,7 @@
static int __init palmz72_ac97_probe(struct device *dev)
{
int err;
- u16 d2 = DIG2_INIT; // init d1 too?
+ u16 d2 = DIG2_INIT;
if(!machine_is_palmz72())
return -ENODEV;
@@ -478,7 +484,7 @@
}
static int palmz72_ac_is_connected (void){
- /* when charger is plugged and USB si not connected, then status is ONLINE */
+ /* when charger is plugged in and USB is not connected, then status is ONLINE */
int ret = (!(GET_GPIO(GPIO_NR_PALMZ72_USB_PULLUP)) && !(GET_GPIO(GPIO_NR_PALMZ72_USB_DETECT)));;
if (ret)
ret = 1;
@@ -488,7 +494,10 @@
return ret;
}
-/* APM */
+/*******
+ * APM *
+ *******/
+
static void palmz72_apm_get_power_status(struct apm_power_info *info)
{
int min, max, curr, percent;
@@ -536,8 +545,6 @@
static int palmz72_ac97_remove (struct device *dev)
{
- // TODO: stop running tasks if any?
-
battery_class_unregister(&palmz72_battery);
ac97 = NULL;
input_unregister_device(palmz72_ac97_input);
@@ -564,6 +571,7 @@
driver_register(&palmz72_ac97_driver);
/* register battery to APM layer */
+
#ifdef CONFIG_PM
apm_get_power_status = palmz72_apm_get_power_status;
return 0;
Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c
===================================================================
--- linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c 2007-01-23 09:53:18 UTC (rev 775)
+++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmz72/palmz72_pm.c 2007-01-23 18:08:22 UTC (rev 776)
@@ -1,17 +1,22 @@
-/*
- * PalmOne Zire72 suspend/resume support
- *
- * Author: Jan Herman <2h...@se...>
- *
- * 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.
- *
- */
+/************************************************************************
+ * PalmOne Zire72 suspend/resume support *
+ * *
+ * Author: Jan Herman <2h...@se...> *
+ * *
+ * *
+ * 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/kernel.h>
#include <linux/device.h>
#include <linux/pm.h>
+#include <linux/fb.h>
+#include <linux/platform_device.h>
+#include <asm/mach-types.h>
+#include <asm/hardware.h>
#include <asm/arch/pxa-pm_ll.h>
#include <asm/arch/hardware.h>
@@ -19,53 +24,103 @@
#include <asm/arch/palmz72-gpio.h>
+typedef struct
+{
+ int brightness;
+} pm_save_data;
-static void palmz72_pxa_ll_pm_suspend(unsigned long resume_addr)
+#ifdef CONFIG_PM
+static int palmz72_suspend(struct device *dev, pm_message_t state)
{
-
- /* Wake up on Voice Memo button*/
- PWER |= PWER_GPIO13;
- /* Wake up on RTC alaram is possibile */
- //PWER |= PWER_RTC;
+ /* Wake-Up on Voice memo button - GPIO 13 */
+ PWER |= PWER_GPIO13 | PWER_RTC | PWER_WEP1;
+
PRER |= PWER_GPIO13;
-
- /* USB, in theory this can even wake us from deep sleep */
- PWER |= PWER_GPIO15;
- PFER |= PWER_GPIO15;
- PRER |= PWER_GPIO15;
+ /* Enabled Deep-Sleep mode ?? */
+ PCFR |= PCFR_DS;
+ /* Here are all of special for suspend PalmOne Zire 72 */
+ //printk("Palmz72_suspend: suspending...");
+
/* Turn off LCD power */
SET_PALMZ72_GPIO(LCD_POWER,0);
/* Turn off USB power */
SET_PALMZ72_GPIO(USB_POWER,0);
+
+ /* disable GPIO reset - DO NOT REMOVE! */
+ PCFR &= PCFR_GPR_EN;
-
- /* disable GPIO reset, palm bootloader will hang us */
- //PCFR |= PCFR_GPR_EN | PCFR_OPDE;
- PCFR &= PCFR_GPR_EN;
-
- return;
+ return 0;
}
-static void palmz72_pxa_ll_pm_resume(void)
+static int palmz72_resume(struct device *dev, pm_message_t state)
{
-
- /* re-enable GPIO reset */
- PCFR |= PCFR_GPR_EN;
+
+ /* Disabled Deep-Sleep mode ?? */
+ PCFR &= PCFR_DS;
+
+ /* Re-enable GPIO reset */
+ PCFR |= PCFR_GPR_EN; /* !! DO NOT REMOVE !! THIS IS NECCESARY FOR ENABLE PALM RESET !! */
+
+
+ /* Here are all of special to resume PalmOne Zire 72 */
+
/* Turn on LCD power */
SET_PALMZ72_GPIO(LCD_POWER,1);
-
/* Turn on USB power */
SET_PALMZ72_GPIO(USB_POWER,1);
+
+ return 0;
}
+#else
+#define palmz72_suspend NULL
+#define palmz72_resume NULL
+#endif
+static void palmz72_pxa_ll_pm_suspend(unsigned long resume_addr)
+{
+ /* For future */
+ return;
+}
+
+static void palmz72_pxa_ll_pm_resume(void)
+{
+ /* For future */
+}
+
struct pxa_ll_pm_ops palmz72_ll_pm_ops = {
- .suspend = palmz72_pxa_ll_pm_suspend,
- .resume = palmz72_pxa_ll_pm_resume,
+ .suspend = palmz72_pxa_ll_pm_suspend,
+ .resume = palmz72_pxa_ll_pm_resume,
};
+static int palmz72_pm_probe(struct device *dev)
+{
+ printk(KERN_NOTICE "PalmOne Zire72 power management driver registered\n");
+ return 0;
+}
+
+struct device_driver palmz72_pm_driver = {
+ .name = "palmz72-pm",
+ .bus = &platform_bus_type,
+ .probe = palmz72_pm_probe,
+ .suspend = palmz72_suspend,
+ .resume = palmz72_resume,
+};
+
+static int __init palmz72_pm_init(void)
+{
+ return driver_register(&palmz72_pm_driver);
+}
+
+static void __exit palmz72_pm_exit(void)
+{
+ driver_unregister(&palmz72_pm_driver);
+}
+
+module_init(palmz72_pm_init);
+module_exit(palmz72_pm_exit);
+
MODULE_AUTHOR("Jan Herman <2h...@se...>");
-MODULE_DESCRIPTION("PalmOne Zire72 suspend/resume support driver");
+MODULE_DESCRIPTION("PalmOne Zire 72 power management driver");
MODULE_LICENSE("GPL");
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|