Send commitlog mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
[EMAIL PROTECTED]
You can reach the person managing the list at
[EMAIL PROTECTED]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:
1. r3943 - in trunk/src/target/gsm: include/gsmd src/gsmd
src/libgsmd src/util ([EMAIL PROTECTED])
2. r3944 - trunk/src/target/opkg ([EMAIL PROTECTED])
3. r3945 - branches/src/target/kernel/2.6.24.x/patches
([EMAIL PROTECTED])
4. r3946 - branches/src/target/kernel/2.6.24.x/patches
([EMAIL PROTECTED])
5. r3947 - branches/src/target/kernel/2.6.24.x/patches
([EMAIL PROTECTED])
6. r3948 - branches/src/target/kernel/2.6.24.x/patches
([EMAIL PROTECTED])
--- Begin Message ---
Author: erin_yueh
Date: 2008-01-24 16:20:40 +0100 (Thu, 24 Jan 2008)
New Revision: 3943
Modified:
trunk/src/target/gsm/include/gsmd/usock.h
trunk/src/target/gsm/src/gsmd/usock.c
trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
trunk/src/target/gsm/src/util/shell.c
Log:
gsmd: query network registration status (Erin Yueh)
Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h 2008-01-24 14:26:24 UTC (rev
3942)
+++ trunk/src/target/gsm/include/gsmd/usock.h 2008-01-24 15:20:40 UTC (rev
3943)
@@ -162,6 +162,7 @@
GSMD_NETWORK_PREF_DEL = 12,
GSMD_NETWORK_PREF_ADD = 13,
GSMD_NETWORK_PREF_SPACE = 14,
+ GSMD_NETWORK_QUERY_REG = 15,
};
enum gsmd_msg_sms {
Modified: trunk/src/target/gsm/src/gsmd/usock.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/usock.c 2008-01-24 14:26:24 UTC (rev
3942)
+++ trunk/src/target/gsm/src/gsmd/usock.c 2008-01-24 15:20:40 UTC (rev
3943)
@@ -664,6 +664,33 @@
return 0;
}
+static int network_query_reg_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
+{
+ struct gsmd_user *gu = ctx;
+ struct gsm_extrsp *er;
+ enum gsmd_netreg_state state;
+
+ DEBUGP("cmd = '%s', resp: '%s'\n", cmd->buf, resp);
+
+ if (strncmp(resp, "+CREG: ", 7))
+ return -EINVAL;
+ resp += 7;
+ er = extrsp_parse(gsmd_tallocs, resp);
+ if(!er)
+ return -ENOMEM;
+ //extrsp_dump(er);
+ /* +CREG: <n>,<stat>[,<lac>,<ci>] */
+ if((er->num_tokens == 4 || er->num_tokens == 2 ) &&
+ er->tokens[0].type == GSMD_ECMD_RTT_NUMERIC &&
+ er->tokens[1].type == GSMD_ECMD_RTT_NUMERIC ) {
+ state = er->tokens[1].u.numeric;
+ }
+
+ talloc_free(er);
+ return gsmd_ucmd_submit(gu, GSMD_MSG_NETWORK, GSMD_NETWORK_QUERY_REG,
+ cmd->id, sizeof(state), &state);
+}
+
static int network_vmail_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
{
struct gsmd_user *gu = ctx;
@@ -735,6 +762,8 @@
cmd->id, sizeof(gsq), &gsq);
}
+
+
static int network_oper_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
{
struct gsmd_user *gu = ctx;
@@ -1004,6 +1033,9 @@
case GSMD_NETWORK_DEREGISTER:
cmd = atcmd_fill("AT+COPS=2", 9+1, &null_cmd_cb, gu, 0, NULL);
break;
+ case GSMD_NETWORK_QUERY_REG:
+ cmd = atcmd_fill("AT+CREG?", 8+1, &network_query_reg_cb, gu, 0,
NULL);
+ break;
case GSMD_NETWORK_VMAIL_GET:
cmd = atcmd_fill("AT+CSVM?", 8+1, &network_vmail_cb, gu, 0,
NULL);
break;
Modified: trunk/src/target/gsm/src/libgsmd/libgsmd_network.c
===================================================================
--- trunk/src/target/gsm/src/libgsmd/libgsmd_network.c 2008-01-24 14:26:24 UTC
(rev 3942)
+++ trunk/src/target/gsm/src/libgsmd/libgsmd_network.c 2008-01-24 15:20:40 UTC
(rev 3943)
@@ -81,6 +81,11 @@
return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_DEREGISTER);
}
+int lgsm_netreg_query(struct lgsm_handle *lh)
+{
+ return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_QUERY_REG);
+}
+
int lgsm_signal_quality(struct lgsm_handle *lh)
{
return lgsm_send_simple(lh, GSMD_MSG_NETWORK, GSMD_NETWORK_SIGQ_GET);
Modified: trunk/src/target/gsm/src/util/shell.c
===================================================================
--- trunk/src/target/gsm/src/util/shell.c 2008-01-24 14:26:24 UTC (rev
3942)
+++ trunk/src/target/gsm/src/util/shell.c 2008-01-24 15:20:40 UTC (rev
3943)
@@ -291,6 +291,7 @@
((void *) gmh + sizeof(*gmh));
const struct gsmd_voicemail *vmail = (struct gsmd_voicemail *)
((void *) gmh + sizeof(*gmh));
+ enum gsmd_netreg_state state = *(enum gsmd_netreg_state *) gmh->data;
int result = *(int *) gmh->data;
static const char *oper_stat[] = {
[GSMD_OPER_UNKNOWN] = "of unknown status",
@@ -361,6 +362,28 @@
printf ("voicemail number is %s \n",vmail->addr.number);
pending_responses --;
break;
+ case GSMD_NETWORK_QUERY_REG:
+ switch (state) {
+ case GSMD_NETREG_UNREG:
+ printf("not searching for network \n");
+ break;
+ case GSMD_NETREG_REG_HOME:
+ printf("registered (home network) \n");
+ break;
+ case GSMD_NETREG_UNREG_BUSY:
+ printf("searching for network \n");
+ break;
+ case GSMD_NETREG_DENIED:
+ printf("registration denied \n");
+ break;
+ case GSMD_NETREG_REG_ROAMING:
+ printf("registered (roaming) \n");
+ break;
+ default:
+ break;
+ }
+ pending_responses --;
+ break;
default:
return -EINVAL;
}
@@ -648,6 +671,10 @@
printf("Signal strength\n");
lgsm_signal_quality(lgsmh);
pending_responses ++;
+ } else if (!strcmp(buf, "nr")) {
+ printf("Query network registration\n");
+ lgsm_netreg_query(lgsmh);
+ pending_responses ++;
} else if (!strcmp(buf, "q")) {
exit(0);
} else if (buf[0] == 'S' ) {
--- End Message ---
--- Begin Message ---
Author: thomas
Date: 2008-01-24 17:58:28 +0100 (Thu, 24 Jan 2008)
New Revision: 3944
Modified:
trunk/src/target/opkg/configure.ac
Log:
opkg: add configure check for libgpgme
Modified: trunk/src/target/opkg/configure.ac
===================================================================
--- trunk/src/target/opkg/configure.ac 2008-01-24 15:20:40 UTC (rev 3943)
+++ trunk/src/target/opkg/configure.ac 2008-01-24 16:58:28 UTC (rev 3944)
@@ -19,9 +19,56 @@
AM_PROG_INSTALL_STRIP
AC_PROG_LIBTOOL
-# Checks for libraries (hah! opkg is pretty much self-contained)
+# Checks for libraries
+
+# check for libcurl
PKG_CHECK_MODULES(CURL, libcurl)
+
+
+dnl **********
+dnl GPGME
+dnl **********
+
+ok="no"
+min_gpgme_version=1.0.0
+AC_PATH_PROG(GPGME_CONFIG, gpgme-config, "failed")
+if test $GPGME_CONFIG != "failed" ; then
+ AC_MSG_CHECKING(for GPGME - version >= $min_gpgme_version)
+ req_major=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
+ req_minor=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+ req_micro=`echo $min_gpgme_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
+ gpgme_config_version=`$GPGME_CONFIG --version`
+ major=`echo $gpgme_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+ minor=`echo $gpgme_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
+ micro=`echo $gpgme_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
+
+ if test "$major" -eq "$req_major"; then
+ if test "$minor" -ge "$req_minor"; then
+ if test "$micro" -ge "$req_micro"; then
+ ok="yes"
+ fi
+ fi
+ fi
+fi
+
+if test $ok = "yes"; then
+ GPGME_CFLAGS=`$GPGME_CONFIG --cflags`
+ GPGME_LIBS=`$GPGME_CONFIG --libs`
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_ERROR(GPGME $min_gpgme_version or later needed)
+fi
+
+
+
+
# Checks for header files
AC_HEADER_DIRENT
AC_HEADER_STDC
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-01-24 19:21:01 +0100 (Thu, 24 Jan 2008)
New Revision: 3945
Modified:
branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
Log:
Now applied funbar-2.6.24-platform-spi-gpio-acc-repair.patch for real.
Previous attempt had only the manual change, since "quilt fold" rejected
the whole patch.
Modified: branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
16:58:28 UTC (rev 3944)
+++ branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:21:01 UTC (rev 3945)
@@ -11,8 +11,21 @@
>a02_nor_flash,
};
-@@ -504,11 +502,6 @@
+@@ -475,10 +473,12 @@
+ },
+ };
++#if 0 /* currently this is not used and we use gpio spi */
+ static struct glamo_spi_info glamo_spi_cfg = {
+ .board_size = ARRAY_SIZE(gta02_spi_board_info),
+ .board_info = gta02_spi_board_info,
+ };
++#endif /* 0 */
+
+ static struct glamo_spigpio_info glamo_spigpio_cfg = {
+ .pin_clk = GLAMO_GPIO10_OUTPUT,
+@@ -504,16 +504,13 @@
+
/* SPI: Accelerometers attached to SPI of s3c244x */
-static void gta02_spi_acc_set_cs(struct s3c2410_spi_info *spi, int cs, int
pol)
@@ -22,22 +35,48 @@
-
static const struct lis302dl_platform_data lis302_pdata[] = {
{
- .name = "lis302-1 (top)"
-@@ -538,10 +531,55 @@
+- .name = "lis302-1 (top)"
++ .name = "lis302-1 (top)",
++ .pin_chip_select= S3C2410_GPD12,
+ }, {
+- .name = "lis302-2 (bottom)"
++ .name = "lis302-2 (bottom)",
++ .pin_chip_select= S3C2410_GPD13,
},
};
+@@ -524,7 +521,7 @@
+ .irq = GTA02_IRQ_GSENSOR_1,
+ .max_speed_hz = 400 * 1000,
+ .bus_num = 1,
+- .chip_select = S3C2410_GPD12,
++ .chip_select = 0,
+ .mode = SPI_MODE_3,
+ },
+ {
+@@ -533,15 +530,63 @@
+ .irq = GTA02_IRQ_GSENSOR_2,
+ .max_speed_hz = 400 * 1000,
+ .bus_num = 1,
+- .chip_select = S3C2410_GPD13,
++ .chip_select = 1,
+ .mode = SPI_MODE_3,
+ },
+ };
+
-static struct s3c2410_spi_info gta02_spi_acc_cfg = {
- .set_cs = gta02_spi_acc_set_cs,
-+
-+static void spi_acc_cs(struct s3c2410_spigpio_info *spi, int cs)
++static void spi_acc_cs(struct s3c2410_spigpio_info *spigpio_info, int cs)
+{
++ struct lis302dl_platform_data * plat_data =
++ (struct lis302dl_platform_data *)spigpio_info->
++ board_info->platform_data;
+ switch (cs) {
+ case BITBANG_CS_ACTIVE:
-+ s3c2410_gpio_setpin(S3C2410_GPD12, 0);
++ s3c2410_gpio_setpin(plat_data->pin_chip_select, 0);
+ break;
+ case BITBANG_CS_INACTIVE:
-+ s3c2410_gpio_setpin(S3C2410_GPD12, 1);
++ s3c2410_gpio_setpin(plat_data->pin_chip_select, 1);
+ break;
+ }
+}
@@ -49,6 +88,7 @@
.board_size = ARRAY_SIZE(gta02_spi_acc_bdinfo),
.board_info = gta02_spi_acc_bdinfo,
+ .chip_select = &spi_acc_cs,
++ .num_chipselect = 2,
+};
+
+static struct resource s3c_spi_acc_resource[] = {
@@ -71,7 +111,7 @@
+};
+
+static struct platform_device s3c_device_spi_acc = {
-+ .name = "s3c24xx-spi-gpio",
++ .name = "spi_s3c24xx_gpio",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(s3c_spi_acc_resource),
+ .resource = s3c_spi_acc_resource,
@@ -81,7 +121,7 @@
};
static struct resource gta02_led_resources[] = {
-@@ -784,7 +822,6 @@
+@@ -784,7 +829,6 @@
s3c_device_usb.dev.platform_data = >a02_usb_info;
s3c_device_nand.dev.platform_data = >a02_nand_info;
s3c_device_sdi.dev.platform_data = >a02_mmc_cfg;
@@ -89,10 +129,23 @@
/* Only GTA02v1 has a SD_DETECT GPIO. Since the slot is not
* hot-pluggable, this is not required anyway */
-@@ -824,6 +861,7 @@
+@@ -796,6 +840,12 @@
break;
}
++ /* acc sensor chip selects */
++ s3c2410_gpio_setpin(S3C2410_GPD12, 1);
++ s3c2410_gpio_cfgpin(S3C2410_GPD12, S3C2410_GPIO_OUTPUT);
++ s3c2410_gpio_setpin(S3C2410_GPD13, 1);
++ s3c2410_gpio_cfgpin(S3C2410_GPD13, S3C2410_GPIO_OUTPUT);
++
+ INIT_WORK(>a02_udc_vbus_drawer.work, __gta02_udc_vbus_draw);
+ s3c24xx_udc_set_platdata(>a02_udc_cfg);
+ set_s3c2410ts_info(>a02_ts_cfg);
+@@ -824,6 +874,7 @@
+ break;
+ }
+
+ platform_device_register(&s3c_device_spi_acc);
platform_device_register(>a01_button_dev);
platform_device_register(>a01_pm_gsm_dev);
@@ -189,3 +242,40 @@
if (rc < 0) {
dev_err(&spi->dev, "error requesting IRQ %d\n",
lis->spi_dev->irq);
+Index: linux-2.6.24-rc8/drivers/spi/spi_s3c24xx_gpio.c
+===================================================================
+--- linux-2.6.24-rc8.orig/drivers/spi/spi_s3c24xx_gpio.c
++++ linux-2.6.24-rc8/drivers/spi/spi_s3c24xx_gpio.c
+@@ -116,6 +116,8 @@
+ /* copy in the plkatform data */
+ info = sp->info = dev->dev.platform_data;
+
++ master->num_chipselect = info->num_chipselect;
++
+ /* setup spi bitbang adaptor */
+ sp->bitbang.master = spi_master_get(master);
+ sp->bitbang.master->bus_num = info->bus_num;
+Index: linux-2.6.24-rc8/include/asm-arm/arch-s3c2410/spi-gpio.h
+===================================================================
+--- linux-2.6.24-rc8.orig/include/asm-arm/arch-s3c2410/spi-gpio.h
++++ linux-2.6.24-rc8/include/asm-arm/arch-s3c2410/spi-gpio.h
+@@ -22,6 +22,7 @@
+ unsigned long pin_miso;
+
+ int bus_num;
++ int num_chipselect;
+
+ unsigned long board_size;
+ struct spi_board_info *board_info;
+Index: linux-2.6.24-rc8/include/linux/lis302dl.h
+===================================================================
+--- linux-2.6.24-rc8.orig/include/linux/lis302dl.h
++++ linux-2.6.24-rc8/include/linux/lis302dl.h
+@@ -5,6 +5,7 @@
+
+ struct lis302dl_platform_data {
+ char *name;
++ unsigned long pin_chip_select;
+ };
+
+ #endif /* _LINUX_LIS302DL_H */
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-01-24 19:29:08 +0100 (Thu, 24 Jan 2008)
New Revision: 3946
Modified:
branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
Log:
Applied s3c-gpio-spi-allow-multi-cs.patch to gta02.patch:
From: warmcat <[EMAIL PROTECTED]>
- Allow multiple chip selects to really work with S3C bitbang
Signed-off-by: warmcat <[EMAIL PROTECTED]>
---
arch/arm/mach-s3c2410/mach-gta01.c | 2 +-
arch/arm/mach-s3c2410/mach-qt2410.c | 2 +-
arch/arm/mach-s3c2440/mach-gta02.c | 7 ++++---
drivers/spi/spi_s3c24xx_gpio.c | 11 +++++++----
include/asm-arm/arch-s3c2410/spi-gpio.h | 2 +-
5 files changed, 14 insertions(+), 10 deletions(-)
Modified: branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:21:01 UTC (rev 3945)
+++ branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:29:08 UTC (rev 3946)
@@ -246,8 +246,21 @@
===================================================================
--- linux-2.6.24-rc8.orig/drivers/spi/spi_s3c24xx_gpio.c
+++ linux-2.6.24-rc8/drivers/spi/spi_s3c24xx_gpio.c
-@@ -116,6 +116,8 @@
- /* copy in the plkatform data */
+@@ -91,7 +91,7 @@
+ struct s3c2410_spigpio *sg = spidev_to_sg(dev);
+
+ if (sg->info && sg->info->chip_select)
+- (sg->info->chip_select)(sg->info, value);
++ (sg->info->chip_select)(sg->info, dev->chip_select, value);
+ }
+
+ static int s3c2410_spigpio_probe(struct platform_device *dev)
+@@ -113,9 +113,11 @@
+
+ platform_set_drvdata(dev, sp);
+
+- /* copy in the plkatform data */
++ /* copy in the platform data */
info = sp->info = dev->dev.platform_data;
+ master->num_chipselect = info->num_chipselect;
@@ -255,11 +268,30 @@
/* setup spi bitbang adaptor */
sp->bitbang.master = spi_master_get(master);
sp->bitbang.master->bus_num = info->bus_num;
+@@ -146,12 +148,17 @@
+ /* register the chips to go with the board */
+
+ for (i = 0; i < sp->info->board_size; i++) {
++ struct spi_device *spidev;
++
+ dev_info(&dev->dev, "registering %p: %s\n",
+ &sp->info->board_info[i],
+ sp->info->board_info[i].modalias);
+
+ sp->info->board_info[i].controller_data = sp;
+- spi_new_device(master, sp->info->board_info + i);
++ spidev = spi_new_device(master, sp->info->board_info + i);
++ if (spidev)
++ spidev->max_speed_hz =
++ sp->info->board_info[i].max_speed_hz;
+ }
+
+ return 0;
Index: linux-2.6.24-rc8/include/asm-arm/arch-s3c2410/spi-gpio.h
===================================================================
--- linux-2.6.24-rc8.orig/include/asm-arm/arch-s3c2410/spi-gpio.h
+++ linux-2.6.24-rc8/include/asm-arm/arch-s3c2410/spi-gpio.h
-@@ -22,6 +22,7 @@
+@@ -22,11 +22,12 @@
unsigned long pin_miso;
int bus_num;
@@ -267,6 +299,12 @@
unsigned long board_size;
struct spi_board_info *board_info;
+
+- void (*chip_select)(struct s3c2410_spigpio_info *spi, int cs);
++ void (*chip_select)(struct s3c2410_spigpio_info *spi, int csid, int cs);
+ };
+
+
Index: linux-2.6.24-rc8/include/linux/lis302dl.h
===================================================================
--- linux-2.6.24-rc8.orig/include/linux/lis302dl.h
@@ -279,3 +317,29 @@
};
#endif /* _LINUX_LIS302DL_H */
+Index: linux-2.6.24-rc8/arch/arm/mach-s3c2410/mach-gta01.c
+===================================================================
+--- linux-2.6.24-rc8.orig/arch/arm/mach-s3c2410/mach-gta01.c
++++ linux-2.6.24-rc8/arch/arm/mach-s3c2410/mach-gta01.c
+@@ -521,7 +521,7 @@
+ },
+ };
+
+-static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int cs)
++static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int csidx, int cs)
+ {
+ switch (cs) {
+ case BITBANG_CS_ACTIVE:
+Index: linux-2.6.24-rc8/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.24-rc8.orig/arch/arm/mach-s3c2410/mach-qt2410.c
++++ linux-2.6.24-rc8/arch/arm/mach-s3c2410/mach-qt2410.c
+@@ -217,7 +217,7 @@
+
+ /* SPI */
+
+-static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int cs)
++static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int csidx, int cs)
+ {
+ switch (cs) {
+ case BITBANG_CS_ACTIVE:
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-01-24 19:31:21 +0100 (Thu, 24 Jan 2008)
New Revision: 3947
Modified:
branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
Log:
adjust-our-gpio-spi-speed.patch by Andy Green.
[ Try to bring speed up to 10 MHz. ]
Modified: branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:29:08 UTC (rev 3946)
+++ branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:31:21 UTC (rev 3947)
@@ -45,18 +45,23 @@
},
};
-@@ -524,7 +521,7 @@
+@@ -522,26 +519,74 @@
+ .modalias = "lis302dl",
+ .platform_data = &lis302_pdata[0],
.irq = GTA02_IRQ_GSENSOR_1,
- .max_speed_hz = 400 * 1000,
+- .max_speed_hz = 400 * 1000,
++ .max_speed_hz = 10 * 1000 * 1000,
.bus_num = 1,
- .chip_select = S3C2410_GPD12,
+ .chip_select = 0,
.mode = SPI_MODE_3,
},
{
-@@ -533,15 +530,63 @@
+ .modalias = "lis302dl",
+ .platform_data = &lis302_pdata[1],
.irq = GTA02_IRQ_GSENSOR_2,
- .max_speed_hz = 400 * 1000,
+- .max_speed_hz = 400 * 1000,
++ .max_speed_hz = 10 * 1000 * 1000,
.bus_num = 1,
- .chip_select = S3C2410_GPD13,
+ .chip_select = 1,
--- End Message ---
--- Begin Message ---
Author: werner
Date: 2008-01-24 19:38:31 +0100 (Thu, 24 Jan 2008)
New Revision: 3948
Modified:
branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
Log:
Merged motion-sensor-driver-fixes.patch into gta02-acc.patch
- various fixes with error paths in probe
- add a "golden" chip init sequence for "data ready" operation
- change to use the combo "data ready" bit
Currently there is some problem that it spends way too much time spamming
SPI when it should be idle, so the device runs at like 25% speed overall
right now.
Event interface is untested for data but events are appearing there.
Find out the event mapping like this
$ cat /proc/bus/input/devices
...
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="lis302dl"
P: Phys=
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=event2
B: EV=7
B: KEY=380000 0 0 0 0 0 0 0 0 0
B: REL=0
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="lis302dl"
P: Phys=
S: Sysfs=/devices/virtual/input/input3
U: Uniq=
H: Handlers=event3
B: EV=7
B: KEY=380000 0 0 0 0 0 0 0 0 0
B: REL=0
then hexdump /dev/input/event2 or whatever will show timestamped
events, but I don't have a way to fire an ioctl to get the actual
coordinate data at the moment.
Signed-off-by: warmcat <[EMAIL PROTECTED]>
---
drivers/input/misc/lis302dl.c | 127 +++++++++++++++++++++++------------------
1 files changed, 71 insertions(+), 56 deletions(-)
Modified: branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch
===================================================================
--- branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:31:21 UTC (rev 3947)
+++ branches/src/target/kernel/2.6.24.x/patches/gta02-acc.patch 2008-01-24
18:38:31 UTC (rev 3948)
@@ -177,7 +177,8 @@
+#define READ_BIT 0x80
+#define ADDR_MASK 0x3f
- static inline u_int8_t __reg_read(struct lis302dl_info *lis, u_int8_t reg)
+-static inline u_int8_t __reg_read(struct lis302dl_info *lis, u_int8_t reg)
++static u_int8_t __reg_read(struct lis302dl_info *lis, u_int8_t reg)
{
int rc;
u_int8_t cmd;
@@ -189,7 +190,12 @@
rc = spi_w8r8(lis->spi_dev, cmd);
-@@ -165,7 +167,9 @@
+@@ -161,11 +163,13 @@
+ return ret;
+ }
+
+-static inline int __reg_write(struct lis302dl_info *lis, u_int8_t reg,
u_int8_t val)
++static int __reg_write(struct lis302dl_info *lis, u_int8_t reg, u_int8_t val)
{
u_int8_t buf[2];
@@ -200,6 +206,21 @@
buf[1] = val;
return spi_write(lis->spi_dev, buf, sizeof(buf));
+@@ -207,10 +211,10 @@
+ enum lis302dl_intmode {
+ LIS302DL_INTMODE_GND = 0x00,
+ LIS302DL_INTMODE_FF_WU_1 = 0x01,
+- LIX302DL_INTMODE_FF_WU_2 = 0x02,
+- LIX302DL_INTMODE_FF_WU_12 = 0x03,
+- LIX302DL_INTMODE_DATA_READY = 0x04,
+- LIX302DL_INTMODE_CLICK = 0x07,
++ LIS302DL_INTMODE_FF_WU_2 = 0x02,
++ LIS302DL_INTMODE_FF_WU_12 = 0x03,
++ LIS302DL_INTMODE_DATA_READY = 0x04,
++ LIS302DL_INTMODE_CLICK = 0x07,
+ };
+
+ static void lis302dl_int_mode(struct spi_device *spi, int int_pin,
@@ -218,10 +222,16 @@
{
struct lis302dl_info *lis = dev_get_drvdata(&spi->dev);
@@ -219,7 +240,83 @@
}
static void _report_btn_single(struct input_dev *inp, int btn)
-@@ -388,6 +398,7 @@
+@@ -247,34 +257,30 @@
+ struct lis302dl_info *lis =
+ container_of(work, struct lis302dl_info, work);
+
+- u_int8_t status, ff_wu_src_1, click_src;
+- u_int8_t val;
++ u_int8_t status, ff_wu_src_1, ff_wu_src_2, click_src;
++ u_int8_t val_x, val_y, val_z;
+
+ lis->working = 1;
+
+ status = reg_read(lis, LIS302DL_REG_STATUS);
+ ff_wu_src_1 = reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
++ ff_wu_src_2 = reg_read(lis, LIS302DL_REG_FF_WU_SRC_2);
+ click_src = reg_read(lis, LIS302DL_REG_CLICK_SRC);
+
+- if (status & LIS302DL_STATUS_XDA) {
+- val = reg_read(lis, LIS302DL_REG_OUT_X);
++ if (status & LIS302DL_STATUS_XYZDA) {
++ val_x = reg_read(lis, LIS302DL_REG_OUT_X);
+ if (lis->flags & LIS302DL_F_FS)
+- val = val << 2;
+- input_report_rel(lis->input_dev, REL_X, val);
+- }
+-
+- if (status & LIS302DL_STATUS_YDA) {
+- val = reg_read(lis, LIS302DL_REG_OUT_Y);
++ val_x = val_x << 2;
++ input_report_rel(lis->input_dev, REL_X, val_x);
++ val_y = reg_read(lis, LIS302DL_REG_OUT_Y);
+ if (lis->flags & LIS302DL_F_FS)
+- val = val << 2;
+- input_report_rel(lis->input_dev, REL_Y, val);
+- }
+-
+- if (status & LIS302DL_STATUS_ZDA) {
+- val = reg_read(lis, LIS302DL_REG_OUT_Z);
++ val_y = val_y << 2;
++ input_report_rel(lis->input_dev, REL_Y, val_y);
++ val_z = reg_read(lis, LIS302DL_REG_OUT_Z);
+ if (lis->flags & LIS302DL_F_FS)
+- val = val << 2;
+- input_report_rel(lis->input_dev, REL_Z, val);
++ val_z = val_z << 2;
++ input_report_rel(lis->input_dev, REL_Z, val_z);
++// printk("%p: x=%d, y=%d, z=%d\n", lis, val_x, val_y, val_z);
+ }
+
+ if (status & 0xf0)
+@@ -310,21 +316,15 @@
+ enable_irq(lis->spi_dev->irq);
+ }
+
+-static void lis302dl_schedule_work(struct lis302dl_info *lis)
+-{
+- int status;
+-
+- get_device(&lis->spi_dev->dev);
+- status = schedule_work(&lis->work);
+- if (!status && !lis->working)
+- dev_dbg(&lis->spi_dev->dev, "work item may be lost\n");
+-}
+-
+ static irqreturn_t lis302dl_interrupt(int irq, void *_lis)
+ {
+ struct lis302dl_info *lis = _lis;
+
+- lis302dl_schedule_work(lis);
++ get_device(&lis->spi_dev->dev);
++
++ if (!schedule_work(&lis->work))
++ if (!lis->working)
++ dev_dbg(&lis->spi_dev->dev, "work item may be lost\n");
+
+ /* Disable any further interrupts until we have processed
+ * the current one */
+@@ -388,6 +388,7 @@
static struct attribute *lis302dl_sysfs_entries[] = {
&dev_attr_sample_rate.attr,
&dev_attr_full_scale.attr,
@@ -227,26 +324,121 @@
};
static struct attribute_group lis302dl_attr_group = {
-@@ -459,12 +470,15 @@
- kfree(lis);
- return -ENODEV;
+@@ -416,7 +417,7 @@
+ LIS302DL_CTRL1_Zen;
+
+ /* since the input core already serializes access and makes sure we
+- * only see close() for the close of the lastre user, we can safely
++ * only see close() for the close of the last user, we can safely
+ * disable the data ready events */
+ reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, ctrl1, 0x00);
+
+@@ -446,44 +447,44 @@
+
+ rc = spi_setup(spi);
+ if (rc < 0) {
+- printk(KERN_ERR "error durign spi_setup of lis302dl driver\n");
++ dev_err(&spi->dev, "error during spi_setup\n");
+ dev_set_drvdata(&spi->dev, NULL);
+- kfree(lis);
+- return rc;
++ goto bail_free_lis;
}
-+ /* switch interrupt to open collector, active-low */
-+ reg_write(lis, LIS302DL_REG_CTRL3,
-+ LIS302DL_CTRL3_PP_OD | LIS302DL_CTRL3_IHL);
-+ lis302dl_int_mode(spi, 1, LIX302DL_INTMODE_DATA_READY);
-+ lis302dl_int_mode(spi, 2, LIX302DL_INTMODE_CLICK);
+ wai = reg_read(lis, LIS302DL_REG_WHO_AM_I);
+ if (wai != LIS302DL_WHO_AM_I_MAGIC) {
+- printk(KERN_ERR "unknown who_am_i signature 0x%02x\n", wai);
++ dev_err(&spi->dev, "unknown who_am_i signature 0x%02x\n", wai);
+ dev_set_drvdata(&spi->dev, NULL);
+- kfree(lis);
+- return -ENODEV;
++ rc = -ENODEV;
++ goto bail_free_lis;
+ }
+
- /* switch interrupt to open collector */
- reg_write(lis, LIS302DL_CTRL3_PP_OD, 0x7c);
--
-+ /* Fix me: always interrupt */
- rc = request_irq(lis->spi_dev->irq, lis302dl_interrupt, IRQF_DISABLED,
++ /* switch interrupt to open collector, active-low */
++ reg_write(lis, LIS302DL_REG_CTRL3, LIS302DL_CTRL3_PP_OD |
++ LIS302DL_CTRL3_IHL);
++ lis302dl_int_mode(spi, 1, LIS302DL_INTMODE_DATA_READY);
++ lis302dl_int_mode(spi, 2, LIS302DL_INTMODE_DATA_READY);
+
+- rc = request_irq(lis->spi_dev->irq, lis302dl_interrupt, IRQF_DISABLED,
- "lis302dl", NULL);
-+ "lis302dl", lis);
++ rc = request_irq(lis->spi_dev->irq, lis302dl_interrupt,
++ IRQF_TRIGGER_LOW, "lis302dl", lis);
if (rc < 0) {
dev_err(&spi->dev, "error requesting IRQ %d\n",
lis->spi_dev->irq);
+- /* FIXME */
+- return rc;
++ goto bail_free_lis;
+ }
+
+ rc = sysfs_create_group(&spi->dev.kobj, &lis302dl_attr_group);
+ if (rc) {
+ dev_err(&spi->dev, "error creating sysfs group\n");
+- /* FIXME */
+- return rc;
++ goto bail_irq;
+ }
+
+ /* initialize input layer details */
+ lis->input_dev = input_allocate_device();
+ if (!lis->input_dev) {
+ dev_err(&spi->dev, "Unable to allocate input device\n");
+- /* FIXME */
++ goto bail_sysfs;
+ }
+
+ set_bit(EV_REL, lis->input_dev->evbit);
+@@ -498,9 +499,35 @@
+ lis->input_dev->open = lis302dl_input_open;
+ lis->input_dev->close = lis302dl_input_close;
+
+- input_register_device(lis->input_dev);
++ rc = input_register_device(lis->input_dev);
++ if (rc) {
++ dev_err(&spi->dev, "error %d registering input device\n", rc);
++ goto bail_inp_dev;
++ }
++
++ reg_write(lis, LIS302DL_REG_CTRL1, 0x47);
++ reg_write(lis, LIS302DL_REG_CTRL3, 0xc0);
++ reg_write(lis, LIS302DL_REG_FF_WU_THS_1, 0x14);
++ reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1, 0x00);
++ reg_write(lis, LIS302DL_REG_FF_WU_CFG_1, 0x95);
++ reg_write(lis, LIS302DL_REG_CTRL3, 0xe4);
++
++ reg_read(lis, LIS302DL_REG_STATUS);
++ reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
++ reg_read(lis, LIS302DL_REG_FF_WU_SRC_2);
++ reg_read(lis, LIS302DL_REG_CLICK_SRC);
+
+ return 0;
++
++bail_inp_dev:
++ input_free_device(lis->input_dev);
++bail_sysfs:
++ sysfs_remove_group(&spi->dev.kobj, &lis302dl_attr_group);
++bail_irq:
++ free_irq(lis->spi_dev->irq, NULL);
++bail_free_lis:
++ kfree(lis);
++ return rc;
+ }
+
+ static int __devexit lis302dl_remove(struct spi_device *spi)
+@@ -511,6 +538,8 @@
+ reg_write(lis, LIS302DL_REG_CTRL1, 0x00);
+ sysfs_remove_group(&spi->dev.kobj, &lis302dl_attr_group);
+ input_unregister_device(lis->input_dev);
++ if (lis->input_dev)
++ input_free_device(lis->input_dev);
+ dev_set_drvdata(&spi->dev, NULL);
+ kfree(lis);
+
Index: linux-2.6.24-rc8/drivers/spi/spi_s3c24xx_gpio.c
===================================================================
--- linux-2.6.24-rc8.orig/drivers/spi/spi_s3c24xx_gpio.c
--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog