diff --git a/firmware/target/arm/ipod/button-clickwheel.c b/firmware/target/arm/ipod/button-clickwheel.c old mode 100644 new mode 100755 index 21bbca6..141bde9 --- a/firmware/target/arm/ipod/button-clickwheel.c +++ b/firmware/target/arm/ipod/button-clickwheel.c @@ -241,6 +241,22 @@ static inline int ipod_4g_button_read(void) } } + else if ((status & 0x800000FF) == 0x8000003A) + { + wheel_is_touched = true; + } + else + { + int v = (unsigned)status >> 4; + if ((v == 0xfffffff) || (v == 0x5555555) || (v == 0xaaaaaaa)) + { + /* + * this happens after a Hold switch release + * (status is then fffffffx, aaaaaaax, 5555555x) + */ + opto_i2c_init(); + } + } } #ifdef HAVE_WHEEL_POSITION @@ -312,6 +328,8 @@ int button_read_device(void) { /* unlock -> enable wheel sensor */ DEV_EN |= DEV_OPTO; + button_init_device(); + ipod_4g_button_int(); } }