Skip to content

Instantly share code, notes, and snippets.

@pamaury
Last active May 27, 2016 13:12
Show Gist options
  • Save pamaury/fd089eca8f54b5eed4bbfcecaacd3dc7 to your computer and use it in GitHub Desktop.
Save pamaury/fd089eca8f54b5eed4bbfcecaacd3dc7 to your computer and use it in GitHub Desktop.
diff --git a/firmware/target/arm/imx233/button-imx233.c b/firmware/target/arm/imx233/button-imx233.c
index 4ebba41..15188f3 100644
--- a/firmware/target/arm/imx233/button-imx233.c
+++ b/firmware/target/arm/imx233/button-imx233.c
@@ -89,7 +89,21 @@ static bool imx233_button_read_cooked(int idx)
int rel = MAP[idx].u.lradc.relative;
if(rel != -1)
raw = (raw * MAP[rel].u.lradc.value) / imx233_button_read_raw(rel);
- res = abs(raw - MAP[idx].u.lradc.value) <= 30;
+ switch(MAP[idx].u.lradc.op)
+ {
+ case IMX233_BUTTON_EQ:
+ res = abs(raw - MAP[idx].u.lradc.value) <= MAP[idx].u.lradc.margin;
+ break;
+ case IMX233_BUTTON_GT:
+ res = raw > MAP[idx].u.lradc.value;
+ break;
+ case IMX233_BUTTON_LT:
+ res = raw < MAP[idx].u.lradc.value;
+ break;
+ default:
+ res = false;
+ break;
+ }
}
else if(MAP[idx].periph == IMX233_BUTTON_PSWITCH)
{
@@ -227,6 +241,9 @@ void imx233_button_init(void)
imx233_lradc_set_channel_irq_callback(src_map[src], button_lradc_irq);
src_mask |= 1 << src;
chan_mask |= 1 << src_map[src];
+ /* use default value for margin */
+ if(MAP[i].u.lradc.margin == 0)
+ MAP[i].u.lradc.margin = 30;
}
#ifdef HAS_BUTTON_HOLD
if(MAP[i].btn == IMX233_BUTTON_HOLD)
diff --git a/firmware/target/arm/imx233/button-imx233.h b/firmware/target/arm/imx233/button-imx233.h
index 61adff8..f165967 100644
--- a/firmware/target/arm/imx233/button-imx233.h
+++ b/firmware/target/arm/imx233/button-imx233.h
@@ -42,6 +42,11 @@
#define IMX233_BUTTON_INVERTED (1 << 0) /* invert button detection */
#define IMX233_BUTTON_PULLUP (1 << 1) /* pin needs a pullup (GPIO) */
+/* values for the .op field */
+#define IMX233_BUTTON_EQ 0 /* channel is equal to value up to error margin */
+#define IMX233_BUTTON_GT 1 /* channel is greater than value */
+#define IMX233_BUTTON_LT 2 /* channel is less than value */
+
/** target-defined
* NOTE for proper operation:
* - the table must end which a dummy entry of type IMX233_BUTTON_END
@@ -68,7 +73,9 @@ struct imx233_button_map_t
struct
{
int src; /* source channel */
- int value; /* expected value */
+ int value; /* comparison value */
+ int op; /* comparison operation */
+ int margin; /* error margin for equal operation (0 means default) */
int relative; /* button to which it is relative or -1 if none */
}lradc;
struct
@@ -84,12 +91,17 @@ struct imx233_button_map_t
int threshold; /* round threshold for acceptance */
};
-/* macros for the common cases */
+/* macros for the common cases (see below for explanation) */
+
#define IMX233_BUTTON_PATH_GPIO(bank_, pin_) .periph = IMX233_BUTTON_GPIO, \
.u = {.gpio = {.bank = bank_, .pin = pin_}}
-#define IMX233_BUTTON_PATH_LRADC_REL(src_, val_, rel_) .periph = IMX233_BUTTON_LRADC, \
- .u = {.lradc = {.src = src_, .value = val_, .relative = rel_}}
-#define IMX233_BUTTON_PATH_LRADC(src_, val_) IMX233_BUTTON_PATH_LRADC_REL(src_, val_, -1)
+#define IMX233_BUTTON_PATH_LRADC_EX(src_, op_, val_, rel_, margin_) .periph = IMX233_BUTTON_LRADC, \
+ .u = {.lradc = {.src = src_, .value = val_, .relative = rel_, .margin = margin_, \
+ .op = IMX233_BUTTON_##op_}}
+#define IMX233_BUTTON_PATH_LRADC_REL(src_, val_, rel_) \
+ IMX233_BUTTON_PATH_LRADC_EX(src_, EQ, val_, rel_, 0)
+#define IMX233_BUTTON_PATH_LRADC(src_, val_) \
+ IMX233_BUTTON_PATH_LRADC_REL(src_, val_, -1)
#define IMX233_BUTTON_PATH_PSWITCH(lvl_) .periph = IMX233_BUTTON_PSWITCH, \
.u = {.pswitch = {.level = lvl_}}
#define IMX233_BUTTON_PATH_END() .periph = -1
diff --git a/firmware/target/arm/imx233/creative-zenxfi3/button-zenxfi3.c b/firmware/target/arm/imx233/creative-zenxfi3/button-zenxfi3.c
index 7d657a1..756231a 100644
--- a/firmware/target/arm/imx233/creative-zenxfi3/button-zenxfi3.c
+++ b/firmware/target/arm/imx233/creative-zenxfi3/button-zenxfi3.c
@@ -34,10 +34,10 @@
struct imx233_button_map_t imx233_button_map[] =
{
[I_VDDIO] = IMX233_BUTTON_(VDDIO, VDDIO(3640), "vddio"), /* we need VDDIO for relative */
- IMX233_BUTTON_(HOLD, GPIO(0, 4), "jack", INVERTED),
+ IMX233_BUTTON_(HOLD, GPIO(0, 4), "hold", INVERTED),
IMX233_BUTTON(VOL_DOWN, GPIO(2, 7), "vol_down", INVERTED),
IMX233_BUTTON(VOL_UP, GPIO(2, 8), "vol_up", INVERTED),
- IMX233_BUTTON_(JACK, LRADC_REL(5, 3520, I_VDDIO), "jack"),
+ IMX233_BUTTON_(JACK, LRADC_EX(5, GT, 2000, I_VDDIO, 0), "jack"),
IMX233_BUTTON(POWER, PSWITCH(1), "power"),
IMX233_BUTTON_(END, END(), "")
};
diff --git a/tools/rockboxdev.sh b/tools/rockboxdev.sh
index 34ecfce..6232546 100755
--- a/tools/rockboxdev.sh
+++ b/tools/rockboxdev.sh
@@ -211,7 +211,7 @@ build() {
./configure --prefix=$prefix $configure_params
;;
*)
- CFLAGS=-U_FORTIFY_SOURCE ../$toolname-$version/configure --target=$target --prefix=$prefix --enable-languages=c --disable-libssp --disable-docs $configure_params
+ CFLAGS="-U_FORTIFY_SOURCE -fgnu89-inline" ../$toolname-$version/configure --target=$target --prefix=$prefix --enable-languages=c --disable-libssp --disable-docs $configure_params
;;
esac
@@ -366,12 +366,8 @@ do
;;
[Ii])
- build "binutils" "mipsel-elf" "2.17" "" "--disable-werror"
- patch=""
- if [ "$system" = "Interix" ]; then
- patch="gcc-4.1.2-interix.diff"
- fi
- build "gcc" "mipsel-elf" "4.1.2" "$patch"
+ build "binutils" "mipsel-elf" "2.22" "" "--disable-werror"
+ build "gcc" "mipsel-elf" "4.6.3" "" "MAKEINFO=missing" "gmp mpfr mpc"
;;
[Mm])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment