* [PATCH] ARM: OMAP: PalmZ71 MPUIO monitoring
@ 2006-11-12 18:34 Marek Vašut
2006-11-17 22:35 ` Tony Lindgren
0 siblings, 1 reply; 2+ messages in thread
From: Marek Vašut @ 2006-11-12 18:34 UTC (permalink / raw)
To: linux-omap-open-source
[-- Attachment #1: Type: text/plain, Size: 273 bytes --]
Hi,
I´ve added some code from board-palmte.c to board-palmz71.c . This code
monitors the status of power cable and headphones (plugged/unplugged). I´ve
also added a few new gpio definitions to board-palmz71.h .
Signed-off-by: Marek Vašut <marek.vasut@gmail.com>
[-- Attachment #2: palmz71-power-and-headphones-monitor.patch --]
[-- Type: text/x-diff, Size: 5901 bytes --]
diff -Naur linux-omap-current/arch/arm/mach-omap1/board-palmz71.c linux-omap/arch/arm/mach-omap1/board-palmz71.c
--- linux-omap-current/arch/arm/mach-omap1/board-palmz71.c 2006-11-12 11:24:41.000000000 +0100
+++ linux-omap/arch/arm/mach-omap1/board-palmz71.c 2006-11-12 14:35:03.000000000 +0100
@@ -272,9 +272,8 @@
static struct omap_mmc_config palmz71_mmc_config __initdata = {
.mmc[0] = {
.enabled = 1,
- .wire4 = 0,
.wp_pin = PALMZ71_MMC_WP_GPIO,
- .power_pin = -1,
+ .power_pin = PALMZ71_MMC_POWER_GPIO,
.switch_pin = PALMZ71_MMC_IN_GPIO,
},
};
@@ -294,21 +293,6 @@
{OMAP_TAG_UART, &palmz71_uart_config},
};
-static irqreturn_t
-palmz71_powercable(int irq, void *dev_id, struct pt_regs *regs)
-{
- if (omap_get_gpio_datain(PALMZ71_USBDETECT_GPIO)) {
- printk(KERN_INFO "PM: Power cable connected\n");
- set_irq_type(OMAP_GPIO_IRQ(PALMZ71_USBDETECT_GPIO),
- IRQT_FALLING);
- } else {
- printk(KERN_INFO "PM: Power cable disconnected\n");
- set_irq_type(OMAP_GPIO_IRQ(PALMZ71_USBDETECT_GPIO),
- IRQT_RISING);
- }
- return IRQ_HANDLED;
-}
-
static void __init
omap_mpu_wdt_mode(int mode)
{
@@ -320,40 +304,81 @@
}
}
-static void __init
-palmz71_gpio_setup(int early)
+/* Periodically check for changes on important input pins */
+struct timer_list palmz71_pin_timer;
+int prev_power, prev_headphones;
+
+static void palmz71_pin_handler(unsigned long data) {
+ int power, headphones;
+
+ power = !omap_get_gpio_datain(PALMZ71_CABLE_GPIO);
+ headphones = omap_get_gpio_datain(PALMZ71_HEADPHONES_GPIO);
+
+ if (power && !prev_power)
+ printk(KERN_INFO "PM: cable connected\n");
+ else if (!power && prev_power)
+ printk(KERN_INFO "PM: cable disconnected\n");
+
+ if (headphones && !prev_headphones) {
+ /* Headphones connected, disable speaker */
+ omap_set_gpio_dataout(PALMZ71_SPEAKER_GPIO, 0);
+ printk(KERN_INFO "PM: speaker off\n");
+ } else if (!headphones && prev_headphones) {
+ /* Headphones unplugged, re-enable speaker */
+ omap_set_gpio_dataout(PALMZ71_SPEAKER_GPIO, 1);
+ printk(KERN_INFO "PM: speaker on\n");
+ }
+
+ prev_power = power;
+ prev_headphones = headphones;
+ mod_timer(&palmz71_pin_timer, jiffies + msecs_to_jiffies(500));
+}
+
+static void __init palmz71_gpio_setup(void)
{
- if (early) {
- /* Only set GPIO1 so we have a working serial */
- omap_set_gpio_dataout(1, 1);
- omap_set_gpio_direction(1, 0);
- } else {
- /* Set MMC/SD host WP pin as input */
- if (omap_request_gpio(PALMZ71_MMC_WP_GPIO)) {
- printk(KERN_ERR "Could not reserve WP GPIO!\n");
- return;
- }
- omap_set_gpio_direction(PALMZ71_MMC_WP_GPIO, 1);
-
- /* Monitor the Power-cable-connected signal */
- if (omap_request_gpio(PALMZ71_USBDETECT_GPIO)) {
- printk(KERN_ERR
- "Could not reserve cable signal GPIO!\n");
- return;
- }
- omap_set_gpio_direction(PALMZ71_USBDETECT_GPIO, 1);
- if (request_irq(OMAP_GPIO_IRQ(PALMZ71_USBDETECT_GPIO),
- palmz71_powercable, SA_SAMPLE_RANDOM, "palmz71-cable", 0))
- printk(KERN_ERR
- "IRQ request for power cable failed!\n");
- palmz71_powercable(OMAP_GPIO_IRQ(PALMZ71_USBDETECT_GPIO), 0, 0);
+ /* Monitor cable-connected signals */
+ if (omap_request_gpio(PALMZ71_CABLE_GPIO) ||
+ omap_request_gpio(PALMZ71_USBDETECT_GPIO)) {
+ printk(KERN_ERR "Could not reserve cable signal GPIO!\n");
+ return;
+ }
+ omap_set_gpio_direction(PALMZ71_CABLE_GPIO, 1);
+ omap_set_gpio_direction(PALMZ71_USBDETECT_GPIO, 1);
+
+ /* Set speaker-enable pin as output */
+ if (omap_request_gpio(PALMZ71_SPEAKER_GPIO)) {
+ printk(KERN_ERR "Could not reserve speaker GPIO!\n");
+ return;
+ }
+ omap_set_gpio_direction(PALMZ71_SPEAKER_GPIO, 0);
+
+ /* Monitor the headphones-connected signal */
+ if (omap_request_gpio(PALMZ71_HEADPHONES_GPIO)) {
+ printk(KERN_ERR "Could not reserve headphones signal GPIO!\n");
+ return;
+ }
+ omap_set_gpio_direction(PALMZ71_HEADPHONES_GPIO, 1);
+
+ prev_power = omap_get_gpio_datain(PALMZ71_CABLE_GPIO);
+ prev_headphones = !omap_get_gpio_datain(PALMZ71_HEADPHONES_GPIO);
+ setup_timer(&palmz71_pin_timer, palmz71_pin_handler, 0);
+ palmz71_pin_handler(0);
+}
+
+static void palmz71_serial_setup(void) {
+ /* Set GPIO1 so we have a working serial */
+ if (omap_request_gpio(PALMZ71_SERIAL_GPIO)) {
+ printk(KERN_ERR "Could not reserve serial power GPIO!\n");
+ return;
}
+ omap_set_gpio_dataout(PALMZ71_SERIAL_GPIO, 1);
+ omap_set_gpio_direction(PALMZ71_SERIAL_GPIO, 0);
}
static void __init
omap_palmz71_init(void)
{
- palmz71_gpio_setup(1);
+ palmz71_serial_setup();
omap_mpu_wdt_mode(0);
omap_board_config = palmz71_config;
@@ -364,7 +389,7 @@
spi_register_board_info(palmz71_boardinfo,
ARRAY_SIZE(palmz71_boardinfo));
omap_serial_init();
- palmz71_gpio_setup(0);
+ palmz71_gpio_setup();
}
static void __init
diff -Naur linux-omap-current/include/asm-arm/arch-omap/board-palmz71.h linux-omap/include/asm-arm/arch-omap/board-palmz71.h
--- linux-omap-current/include/asm-arm/arch-omap/board-palmz71.h 2006-11-12 11:25:08.000000000 +0100
+++ linux-omap/include/asm-arm/arch-omap/board-palmz71.h 2006-11-12 14:32:54.000000000 +0100
@@ -13,14 +13,23 @@
#ifndef __OMAP_BOARD_PALMZ71_H
#define __OMAP_BOARD_PALMZ71_H
+#include <asm/arch/gpio.h>
+
#define PALMZ71_USBDETECT_GPIO 0
+#define PALMZ71_SERIAL_GPIO 1
#define PALMZ71_PENIRQ_GPIO 6
#define PALMZ71_MMC_WP_GPIO 8
+#define PALMZ71_MMC_POWER_GPIO 9
#define PALMZ71_HDQ_GPIO 11
+#define PALMZ71_HEADPHONES_GPIO 14
+#define PALMZ71_SPEAKER_GPIO 15
#define PALMZ71_HOTSYNC_GPIO OMAP_MPUIO(1)
#define PALMZ71_CABLE_GPIO OMAP_MPUIO(2)
#define PALMZ71_SLIDER_GPIO OMAP_MPUIO(3)
#define PALMZ71_MMC_IN_GPIO OMAP_MPUIO(4)
+#define PALMZ71_MMC1_GPIO OMAP_MPUIO(6)
+#define PALMZ71_MMC2_GPIO OMAP_MPUIO(7)
+#define PALMZ71_MMC3_GPIO OMAP_MPUIO(11)
#endif /* __OMAP_BOARD_PALMZ71_H */
[-- Attachment #3: Type: text/plain, Size: 0 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] ARM: OMAP: PalmZ71 MPUIO monitoring
2006-11-12 18:34 [PATCH] ARM: OMAP: PalmZ71 MPUIO monitoring Marek Vašut
@ 2006-11-17 22:35 ` Tony Lindgren
0 siblings, 0 replies; 2+ messages in thread
From: Tony Lindgren @ 2006-11-17 22:35 UTC (permalink / raw)
To: Marek Vašut; +Cc: linux-omap-open-source
* Marek Vašut <marek.vasut@gmail.com> [061112 20:41]:
> Hi,
>
> I´ve added some code from board-palmte.c to board-palmz71.c . This code
> monitors the status of power cable and headphones (plugged/unplugged). I´ve
> also added a few new gpio definitions to board-palmz71.h .
This one does not seem to apply cleanly, can you please repost an
updated version?
Thanks,
Tony
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-11-17 22:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-12 18:34 [PATCH] ARM: OMAP: PalmZ71 MPUIO monitoring Marek Vašut
2006-11-17 22:35 ` Tony Lindgren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox