Commit graph

489 commits

Author SHA1 Message Date
Amaury Pouly
6e553e315d fix red on stmp<3780
Change-Id: I74f0450e8f42032265b980b95f17b0b05d9dffa5
2016-09-22 21:13:12 +01:00
Amaury Pouly
420eb66cab imx233: add power-up source to the debug menu
Change-Id: Ib67385354b1d6529d41198bfdcb1ecd092e9b98b
2016-09-22 21:03:31 +01:00
Amaury Pouly
5e2600eb3a imx233: make microphone bias, bias pin and resistor configurable
This clearly fixes recording on targets where the bias pin was wrong. It may
also improve recording on targets where the bias voltage was wrong. I was unable
to find those parameters on the ZEN Mozaic, which fallback to default values.

Change-Id: Ifb5f823c9cbd01f0d9a80fa5d49d93972c8b7cfe
2016-09-21 00:36:51 +01:00
Amaury Pouly
9dc4b00df1 imx233: fix recording gain
For some reason, there was a mismatch between the setting (decibel) and the
audiohw code (centicel). This resulted in a gain divided by 10. This may
explain why some people experienced low volume with the mic on the fuze+.

Change-Id: I138ac18dd93c36f43a7dfce735efc826405c598c
2016-09-21 00:29:14 +01:00
Amaury Pouly
82b09144e9 imx233: add alarm value to debug menu
Hopefully this can help debugging alarm problems.

Change-Id: Id8c5603a6372744dfc62890443a37de2dd92a7c0
2016-08-22 23:37:33 +01:00
Amaury Pouly
1bd47de339 zenxfi3: recalibrate battery curve
Apparently I simply forgot to calibrate it when the port was done and the
current values are just plain wrong, especially for the charging curve.

Change-Id: Ied3cafa52f31f182f953714e28edc4c5e891255f
2016-06-12 18:38:38 +01:00
Amaury Pouly
9a6700d52e imx233: fix power off code
There are two very suspicious things in the power off code:
- it does not properly unlock the power register, so it should fail (!)
- it does not disable sw/hw watchdog so if register fails, the device will
  most probably crash horribly because of the watchdog
I don't even understand how it worked before.

Change-Id: I9f3f94bd012e52c3b50cd5b658d68b5eb907f79b
2016-06-08 21:53:36 +02:00
Amaury Pouly
59ae562a32 fix yellow
Change-Id: Ie18d7f83ba3e7293d4cd110429e1578930d35d99
2016-06-01 22:19:59 +01:00
Amaury Pouly
ccd500a48a imx233: fix stupid typo in debug screen
Change-Id: Ife43543d6eee6522f4016f37479a20a0db39240d
2016-06-01 23:09:49 +02:00
Amaury Pouly
d42a4a4eb4 zenxfi3: rewrite mpr121 driver
The new driver uses an asynchronous architecture for touch status reading.

Change-Id: Ic75a8b91bc47ee16c3af873afde178cd70186376
2016-06-01 23:09:27 +02:00
Amaury Pouly
b2afd931e2 fuze+: rewrite touchpad driver
The old driver was bad in many respect, it had some race conditions, it was
using a thread to serialize transfers because of the legacy i2c interface.
It also had huge latency (typically 50ms but delays up to 300ms can happen),
thus some presses were missed.
The new driver takes advantage of the new i2c driver to do everything
asynchronously. It also does not need a thread anymore because queueing
ensures proper serialization. It provides much better and reliable latency
(typically ~2ms).
Also fix the debug screen which was horribly broken. The new screen also
displays the deadzones.

Change-Id: I69b7f99b75053e6b1d3d56beb4453c004fd2076e
2016-06-01 23:08:17 +02:00
Amaury Pouly
4d42e3685c imx233: rewrite i2c driver
The new driver provides several new features:
- asynchronous transfer
- transactions (several transfers executed at once)
- queueing
The style still provides the legacy interface.

Change-Id: I6d8ecc89d1f7057847c9b2dc69b76cd45c9c8407
2016-06-01 22:55:37 +02:00
Amaury Pouly
6d124c738b Fix red, forgotten file
Change-Id: Ia9c1e924c84772205472289494c62a63a3433727
2016-05-29 20:21:26 +01:00
Amaury Pouly
633c8edf47 imx233: two minor fixes for sd/mmc
Always enable support for SET_BLOCK_COUNT on mmc: it is mandatory. For some
reason (probably a mistake) it was disabled unconditionaly on mmc.
Also deselect sd card after init. Although it is unlikely to make a difference,
it is already done for mmc so stay consistent.

Change-Id: I276f0d95f5bb6a0bf431c2fff4589d3dfb15f8c7
2016-05-29 16:08:42 +01:00
Amaury Pouly
85ad99ee3d imx233: add sd/mmc debug screen
The screen currently displays for each device the bus width, set_block_count
support, HS capability and whether it is enabled for not.

Change-Id: I6b1c3b1019e55ef1097a23c1f54fb07f5c7aa3b0
2016-05-29 16:07:43 +01:00
Amaury Pouly
7aacf4da2d imx233: fix button debug screen on landscape mode screen
Some players like the ZEN X-Fi have a wide but not tall screen, it is
thus better to display everything on one line for each button

Change-Id: Ided3d4ff689cc5d3bcc2bdba4c7e046cf7dc0954
2016-05-29 16:05:56 +01:00
Amaury Pouly
ae7dd5388d imx233: fix red
stop pretending that stmp3600 and stmp3700 have a 4.2V power rail

Change-Id: If2506ed3e7c5db96dedc668f0931d59a5197dd88
2016-05-28 16:50:07 +01:00
Amaury Pouly
cdca7cee71 imx233: add new power debug screen
This screen allows to put the device in a special mode where:
- charging is disabled
- device only draws power from 5V (thus battery is untouched)
This is useful to measure the device consumption by measuring directly
the usb power consumption.

Change-Id: I2716ced0a5bb33c3c9a2607f2d17a0ce02f5689c
2016-05-28 17:38:29 +02:00
Amaury Pouly
2dcc9fc39f imx233: fix debug screen button handling
The code was very primitive and did not handle release events properly.

Change-Id: I1c56005282a9fb6608f79ff3b483ba614d635fdb
2016-05-28 17:38:10 +02:00
Amaury Pouly
941ac165d8 imx233: speedup charging trickle phase
Per Freescale recommandation, we need to ramp up the 4.2V rail before enabling
charging. Ramping should be done at 1 step/10ms, but the old code did 1 step/1s
because the powermgmt_step() function is called once every second. Use a tick
task to ramp up much faster.

Change-Id: I9a52bdd0c2ba5426d83ed42db8db7ecce2fea1f7
2016-05-28 16:21:03 +01:00
Amaury Pouly
d245b7a2a1 imx233: fix system_exception_wait()
The old code used button_get() to read the button status and wait for a
key to leave the panic screen. This is broken since when IRQ are disable,
the button mask is not updated anymore for touchpad and adc buttons. For
now, only use pswitch: this should be good enough for all targets.

Change-Id: I0ae179e24555ac20c3d2bf2d267c1bb0e2ceded0
2016-05-28 17:19:48 +02:00
Amaury Pouly
a25700e4a0 imx233: fix frequency reporting
The code reported the frequency in kHz instead of Hz, thus breaking a debug
screen.

Change-Id: Id46de970cfb55bcdc09b63f59b244ee3ad6264b8
2016-05-28 17:18:52 +02:00
Amaury Pouly
643c0a1e0e imx233: simplify timrot API
The old timrot setup API was very low-level and unfriendly. The new one
makes in easier to select the frequency source. Use to simplify timer
and kernel timer code.

Change-Id: Iffcdf11c00e925be9ec8d9a4efc74b197b6bd2aa
2016-05-28 17:18:32 +02:00
Amaury Pouly
423c64770c zenxfi3: fix headphone detection
The adc channel monitored for jack detection does not really have a fixed
value when plugged. Instead use the same logic as the OF and simply use a
threshold.

Change-Id: I1d5270d83eb14decce29a39d8201ea1d1fb4436c
2016-05-28 17:12:01 +02:00
Amaury Pouly
7e00be9a1e nwz-370/380: increase adc button error margin
For some reason those targets have quite imprecise button voltages and the
old margin was too small. This should fix the button-not-working issue,
especially when the player is very hot and cold.

Change-Id: I9fcddd7f079cd1c4ee121567fb21a4a0cbc0562b
2016-05-28 17:11:49 +02:00
Amaury Pouly
9fe854e782 imx233: enhance button driver adc handling
The current driver is limited to checking if the adc value equals another
one with a hardcoded margin. This commit changes two aspects of that:
- the margin can be changed globally using IMX233_BUTTON_LRADC_MARGIN
  and can also be overriden per button using the new LRADC_EX macro
- the lradc logic gained two comparison modes to check if the source
  value is greater (or lower) than a threshold.

Change-Id: If1614451dafeae818a96e6f23a84e6731331ba03
2016-05-28 17:09:19 +02:00
Amaury Pouly
030a9da0d7 imx233: cosmetics
Shorten some text to make the text readable in the debug screen of
targets with small LCD (like NWZ-380). In some screens, the only
option is to display less information.

Change-Id: I78f8f35f7c507de19e5d27a918157504155f2ba6
2016-05-28 17:07:42 +02:00
Amaury Pouly
f182e2df66 imx233: make sure not to discharge battery when charge is complete
The power management code was erroneously shuting down the 4.2V rail
when charging is complete. This resulted in the DCDC draining the battery
and thus the battery discharging with USB plugged...
The new code keeps the 4.2V rail active so that battery remains untouched
once charge is complete.

Change-Id: I36e8d31e8115c12ce813c939c5d7bbf2c3490157
2016-05-28 17:07:11 +02:00
Amaury Pouly
eac1ca22bd imx233: generate register headers using headergen_v2 and update code for it
NOTE: this commit does not introduce any change, ideally even the binary should
be almost the same. I checked the disassembly by hand and there are only a few
differences here and there, mostly the compiler decides to compile very close
expressions slightly differently. I tried to run the new code on several targets
to make sure and saw no difference.

The major syntax changes of the new headers are as follows:
- BF_{WR,SET,CLR} are now superpowerful and allows to set several fileds at once:
  BF_WR(reg, field1(value1), field2(value2), ...)
- BF_CS (use like BF_WR) does a write to reg_CLR and then reg_SET instead of RMW
- there is no more need for macros like BF_{WR_,SET,CLR}_V, since one can simply
  BF_WR with field_V(name)
- the old BF_SETV macro has no trivial equivalent and is replaced with its
  its equivalent for BF_WR(reg_SET, ...)

I also rename the register headers: "regs/regs-x.h" -> "regs/x.h" to avoid the
redundant "regs".

Final note: the registers were generated using the following command:
./headergen_v2 -g imx -o ../../firmware/target/arm/imx233/regs/ desc/regs-stmp3{600,700,780}.xml

Change-Id: I7485e8b4315a0929a8edb63e7fa1edcaa54b1edc
2016-05-28 16:49:22 +02:00
Marcin Bukat
89ba7e818c Get rid of stupid _backlight_* function names
_remote_backlight_* and _buttonlight_* are cleaned as well

Change-Id: I73653752831bbe170c26ba95d3bc04c2e3a5cf30
2015-01-12 11:09:27 +01:00
Amaury Pouly
73a780265a zen: typo
Change-Id: I68be3c768c092d7e43df8fa233f3a954e56f4d93
2014-11-10 20:30:16 +01:00
Amaury Pouly
8146b40e73 Fuze+: add a configurable deadzone area for touchpad buttons
To stop erroneous button presses, allow users to add a deadzone between
the button via the Settings > General > System menu > Touch Dead Zone.

The configuration was chosen this way: the touchpad has the same DPI
in both direction so the setting applies the same on both the X and Y
axis. The setting ranges from 0 to 100 and is internally multiplied by 2
giving a maximum deadzone of 2*100 = 200 around each button, which
account for 400 total (once around each button), effectively reducing
each virtual button from 1000x600 to 600x200 when using the maximum value.

Change-Id: I8683c63d2950200eb32d1dda0a00bbd92d83d5be
Reviewed-on: http://gerrit.rockbox.org/677
Reviewed-by: Benjamin Brown <foolshperson@gmail.com>
Tested: Benjamin Brown <foolshperson@gmail.com>
Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
2014-09-08 11:21:54 +02:00
Michael Sevakis
7d1a47cf13 Rewrite filesystem code (WIP)
This patch redoes the filesystem code from the FAT driver up to the
clipboard code in onplay.c.

Not every aspect of this is finished therefore it is still "WIP". I
don't wish to do too much at once (haha!). What is left to do is get
dircache back in the sim and find an implementation for the dircache
indicies in the tagcache and playlist code or do something else that
has the same benefit. Leaving these out for now does not make anything
unusable. All the basics are done.

Phone app code should probably get vetted (and app path handling
just plain rewritten as environment expansions); the SDL app and
Android run well.

Main things addressed:
1) Thread safety: There is none right now in the trunk code. Most of
what currently works is luck when multiple threads are involved or
multiple descriptors to the same file are open.

2) POSIX compliance: Many of the functions behave nothing like their
counterparts on a host system. This leads to inconsistent code or very
different behavior from native to hosted. One huge offender was
rename(). Going point by point would fill a book.

3) Actual running RAM usage: Many targets will use less RAM and less
stack space (some more RAM because I upped the number of cache buffers
for large memory). There's very little memory lying fallow in rarely-used
areas (see 'Key core changes' below). Also, all targets may open the same
number of directory streams whereas before those with less than 8MB RAM
were limited to 8, not 12 implying those targets will save slightly
less.

4) Performance: The test_disk plugin shows markedly improved performance,
particularly in the area of (uncached) directory scanning, due partly to
more optimal directory reading and to a better sector cache algorithm.
Uncached times tend to be better while there is a bit of a slowdown in
dircache due to it being a bit heavier of an implementation. It's not
noticeable by a human as far as I can say.

Key core changes:
1) Files and directories share core code and data structures.

2) The filesystem code knows which descriptors refer to same file.
This ensures that changes from one stream are appropriately reflected
in every open descriptor for that file (fileobj_mgr.c).

3) File and directory cache buffers are borrowed from the main sector
cache. This means that when they are not in use by a file, they are not
wasted, but used for the cache. Most of the time, only a few of them
are needed. It also means that adding more file and directory handles
is less expensive. All one must do in ensure a large enough cache to
borrow from.

4) Relative path components are supported and the namespace is unified.
It does not support full relative paths to an implied current directory;
what is does support is use of "." and "..". Adding the former would
not be very difficult. The namespace is unified in the sense that
volumes may be specified several times along with relative parts, e.g.:
"/<0>/foo/../../<1>/bar" :<=> "/<1>/bar".

5) Stack usage is down due to sharing of data, static allocation and
less duplication of strings on the stack. This requires more
serialization than I would like but since the number of threads is
limited to a low number, the tradoff in favor of the stack seems
reasonable.

6) Separates and heirarchicalizes (sic) the SIM and APP filesystem
code. SIM path and volume handling is just like the target. Some
aspects of the APP file code get more straightforward (e.g. no path
hashing is needed).

Dircache:
Deserves its own section. Dircache is new but pays homage to the old.
The old one was not compatible and so it, since it got redone, does
all the stuff it always should have done such as:

1) It may be update and used at any time during the build process.
No longer has one to wait for it to finish building to do basic file
management (create, remove, rename, etc.).

2) It does not need to be either fully scanned or completely disabled;
it can be incomplete (i.e. overfilled, missing paths), still be
of benefit and be correct.

3) Handles mounting and dismounting of individual volumes which means
a full rebuild is not needed just because you pop a new SD card in the
slot. Now, because it reuses its freed entry data, may rebuild only
that volume.

4) Much more fundamental to the file code. When it is built, it is
the keeper of the master file list whether enabled or not ("disabled"
is just a state of the cache). Its must always to ready to be started
and bind all streams opened prior to being enabled.

5) Maintains any short filenames in OEM format which means that it does
not need to be rebuilt when changing the default codepage.

Miscellaneous Compatibility:
1) Update any other code that would otherwise not work such as the
hotswap mounting code in various card drivers.

2) File management: Clipboard needed updating because of the behavioral
changes. Still needs a little more work on some finer points.

3) Remove now-obsolete functionality such as the mutex's "no preempt"
flag (which was only for the prior FAT driver).

4) struct dirinfo uses time_t rather than raw FAT directory entry
time fields. I plan to follow up on genericizing everything there
(i.e. no FAT attributes).

5) unicode.c needed some redoing so that the file code does not try
try to load codepages during a scan, which is actually a problem with
the current code. The default codepage, if any is required, is now
kept in RAM separarately (bufalloced) from codepages specified to
iso_decode() (which must not be bufalloced because the conversion
may be done by playback threads).

Brings with it some additional reusable core code:
1) Revised file functions: Reusable code that does things such as
safe path concatenation and parsing without buffer limitations or
data duplication. Variants that copy or alter the input path may be
based off these.

To do:
1) Put dircache functionality back in the sim. Treating it internally
as a different kind of file system seems the best approach at this
time.

2) Restore use of dircache indexes in the playlist and database or
something effectively the same. Since the cache doesn't have to be
complete in order to be used, not getting a hit on the cache doesn't
unambiguously say if the path exists or not.

Change-Id: Ia30f3082a136253e3a0eae0784e3091d138915c8
Reviewed-on: http://gerrit.rockbox.org/566
Reviewed-by: Michael Sevakis <jethead71@rockbox.org>
Tested: Michael Sevakis <jethead71@rockbox.org>
2014-08-30 03:48:23 +02:00
Avi Eisenberg
d3cf366868 Fuze+: fixed brightness settings: previously there were 81 settings for only 26 possible brightnesses, now there are 33 for 33
Change-Id: Idc6e3a635850f3ee54ec23246795af88af960ab0
Reviewed-on: http://gerrit.rockbox.org/916
Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
2014-08-25 09:44:32 +02:00
Amaury Pouly
8d754c0997 Sony NWZ: calibrate discharge curves
The charging curve also need to be calibrated but that will be part of another
commit.

Change-Id: Ie4c5995123e4059ae4f3c9d86c11fc1257314d39
2014-07-01 17:26:29 +02:00
Amaury Pouly
6e575b6c70 sonynwz: fix backlight
Apparently the backlight driver is leaking current even when the PWM set to 0.
This patch should greatly improve the battery life of the device.

Change-Id: I76bbc8a87cae452e599b37de17e91f373cee58bc
2014-06-30 20:57:37 +02:00
Amaury Pouly
761f59c9e3 zen/zenxfi: don't switch emi on cpu change to avoid screen flicker
On those targets, since the LCDIF cannot recover from underflow, changing the
EMI frequency kills one frame and cause flicker.

Change-Id: Id3c130636bcfddcc6c54896602699fbaa1636ab4
2014-06-24 18:07:56 +02:00
Amaury Pouly
55c5c7ea66 imx233/emi: cleanup and don't change emi freq if not needed
Change-Id: I19f633a85bb12f880215905482934e34da549a13
2014-06-24 18:07:56 +02:00
Amaury Pouly
32219513aa fix whitespace
Change-Id: I12664528fdb0920430557739501367d1ed68346e
2014-06-24 18:07:56 +02:00
Amaury Pouly
d5591a2b28 zen/zenxfi: switch lcd driver to 24-bit mode
Change-Id: I2c42f0e422130bcdaf1aaf92c7b56776752f4f64
2014-06-24 18:07:55 +02:00
Amaury Pouly
fcb835f61a regtools: normalise description files, and remove obsolete file. No logical change.
Files were generated using utils/regtools/tester in "write" mode.

Change-Id: Ib391b8dbb5ec84eb821e0d0a3699d306414f2aa1
2014-05-01 19:35:05 +02:00
Amaury Pouly
c8461c5152 imx233: fix comments
Change-Id: I2e907feaec39e6ec1614ed19676b13a1d4f7f6b2
2014-04-24 14:12:25 +02:00
Amaury Pouly
25ecbc5432 imx233: fix typos and sdmmc bug regarding write buffer
The write buffer should not be modified but the current code does and then
forget to restore it to its original content. I'm not sure if any code relies
to the write buffer to not be modifies by the write function but this seems like
a reasonable assumption in general so it's better not to break it.

Change-Id: I449a01db2ec51d2273e59b69c59db0e7d2eed3db
2014-04-23 23:44:11 +02:00
Amaury Pouly
54dd77a5f8 imx233: fix sdmmc driver bug when sector count is 0
Since the driver will read count-1 sectors, this will stuck the card.

Change-Id: Ib80484044acd1fad2914d3ffeb3940a13d2480c4
2014-04-23 23:43:27 +02:00
David Jilke
d489444119 Complete Plugin Keymaps for Creative Zen X-Fi3
This patch completes the plugin keymaps for the Zen X-Fi3 and enables those plugins for compilation.
One key was changed in "button-target.h" for compatibility with Rockboy.
This also caused the changes to "keymap-zenxfi3.c", to keep the stock functionality (no further changes in here).

Change-Id: Ic222faf89e9a9a2332a49d6e532cedb6eb16d3d7
Reviewed-on: http://gerrit.rockbox.org/762
Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
2014-04-06 20:51:12 +02:00
Amaury Pouly
5abe98dada zenxfi3: fix horrible bug which prevented the power button to work
Change-Id: Ic8e86762f84ca41e931801c1aee08007129eef20
2014-03-22 22:36:32 +01:00
Amaury Pouly
2a71c08533 zenxfi: enable speaker
Change-Id: I603112d2a348abf92d5c8975ea76d3a57fda7cfc
2014-03-09 01:25:51 +01:00
Amaury Pouly
9637f4486b imx233: rewrite frequency scaling to use the new function
Change-Id: I0f9968de76ce17710d31f7bc609440654e68b6f1
2014-03-08 18:51:54 +01:00
Amaury Pouly
1f3979821c imx233: add function to change cpu/hbus frequency safely
Change-Id: I88e9ad54ba65846ae4d94ae03009b3656f2489f2
2014-03-08 18:51:54 +01:00
Amaury Pouly
3e2f3efd89 imx233: prepare frequency scaling for stmp3700
Add entry for stmp3700 maximum frequency which is 320MHz.

Change-Id: I6db4aad4efa0a7c1347a1ceb262a0295f63057ae
2014-03-08 18:51:54 +01:00