From 7a5130a27722b95f0de965e99e1fd7cb322cafcf Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Mon, 27 Sep 2021 17:18:19 +0100 Subject: x1000: fix broken OST2 timer prescaler It turns out the prescaler fields in OST_CTRL are 2 bits wide, not 3. The programming manual (as usual) is ambiguous and its diagram shows 2-bit wide fields, but the bit positions in the text give a 3-bit wide field. Ingenic's Linux code and my own testing shows that they are, in fact, 2 bits wide. This caused the OST2 divisor to be 16 instead of 4; the OST1 divisor was correct. This means that all udelay/mdelay calls took 4x longer than they should've. After this change the OST2 prescaler will be 4, as intended, and udelay/mdelay calls will wait for the intended duration. Change-Id: I2ac0a9190f49b59a840c649bf586131f5f9fde82 --- firmware/target/mips/ingenic_x1000/fiiom3k/button-fiiom3k.c | 4 ++-- firmware/target/mips/ingenic_x1000/x1000/ost.h | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'firmware/target/mips') diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/button-fiiom3k.c b/firmware/target/mips/ingenic_x1000/fiiom3k/button-fiiom3k.c index 4354257f7b..04e3102d42 100644 --- a/firmware/target/mips/ingenic_x1000/fiiom3k/button-fiiom3k.c +++ b/firmware/target/mips/ingenic_x1000/fiiom3k/button-fiiom3k.c @@ -45,11 +45,11 @@ #define STATE_SCROLLING 4 /* Assume there's no active touch if no event is reported in this time */ -#define AUTORELEASE_TIME (10000 * OST_TICKS_PER_US) +#define AUTORELEASE_TIME (40 * 1000 * OST_TICKS_PER_US) /* If there's no significant motion on the scrollbar for this time, * then report it as a button press instead */ -#define SCROLL_PRESS_TIME (100000 * OST_TICKS_PER_US) +#define SCROLL_PRESS_TIME (400 * 1000 * OST_TICKS_PER_US) /* If a press on the scrollbar moves more than this during SCROLL_PRESS_TIME, * then we enter scrolling mode. */ diff --git a/firmware/target/mips/ingenic_x1000/x1000/ost.h b/firmware/target/mips/ingenic_x1000/x1000/ost.h index 8f2619e0e7..9444712e86 100644 --- a/firmware/target/mips/ingenic_x1000/x1000/ost.h +++ b/firmware/target/mips/ingenic_x1000/x1000/ost.h @@ -31,21 +31,21 @@ #define JT_OST_CTRL JIO_32_RW #define JN_OST_CTRL OST_CTRL #define JI_OST_CTRL -#define BP_OST_CTRL_PRESCALE2 3 -#define BM_OST_CTRL_PRESCALE2 0x38 +#define BP_OST_CTRL_PRESCALE2 2 +#define BM_OST_CTRL_PRESCALE2 0xc #define BV_OST_CTRL_PRESCALE2__BY_1 0x0 #define BV_OST_CTRL_PRESCALE2__BY_4 0x1 #define BV_OST_CTRL_PRESCALE2__BY_16 0x2 -#define BF_OST_CTRL_PRESCALE2(v) (((v) & 0x7) << 3) +#define BF_OST_CTRL_PRESCALE2(v) (((v) & 0x3) << 2) #define BFM_OST_CTRL_PRESCALE2(v) BM_OST_CTRL_PRESCALE2 #define BF_OST_CTRL_PRESCALE2_V(e) BF_OST_CTRL_PRESCALE2(BV_OST_CTRL_PRESCALE2__##e) #define BFM_OST_CTRL_PRESCALE2_V(v) BM_OST_CTRL_PRESCALE2 #define BP_OST_CTRL_PRESCALE1 0 -#define BM_OST_CTRL_PRESCALE1 0x7 +#define BM_OST_CTRL_PRESCALE1 0x3 #define BV_OST_CTRL_PRESCALE1__BY_1 0x0 #define BV_OST_CTRL_PRESCALE1__BY_4 0x1 #define BV_OST_CTRL_PRESCALE1__BY_16 0x2 -#define BF_OST_CTRL_PRESCALE1(v) (((v) & 0x7) << 0) +#define BF_OST_CTRL_PRESCALE1(v) (((v) & 0x3) << 0) #define BFM_OST_CTRL_PRESCALE1(v) BM_OST_CTRL_PRESCALE1 #define BF_OST_CTRL_PRESCALE1_V(e) BF_OST_CTRL_PRESCALE1(BV_OST_CTRL_PRESCALE1__##e) #define BFM_OST_CTRL_PRESCALE1_V(v) BM_OST_CTRL_PRESCALE1 -- cgit v1.2.3