bq20z75: Fix issues with present and suspend
authorRhyland Klein <rklein@nvidia.com>
Thu, 10 Mar 2011 00:18:02 +0000 (16:18 -0800)
committerAnton Vorontsov <cbouatmailru@gmail.com>
Wed, 16 Mar 2011 13:40:58 +0000 (16:40 +0300)
commita7d9ace4eb3a6a3c3fcb12fb05510c1893808263
tree2464cd8e7285165562ed004cc1996fd6681827cd
parenta223246f7280422f77c15b71455fe3362d3604b4
bq20z75: Fix issues with present and suspend

There are a few issues found around the battery not being present. If the
battery isn't present, then a few undesirable things happen. The first was
excessive reporting of failed properties. This was fixed by instead
returning ENODATA for all properties other than PRESENT if the battery
isn't present. That way the callers can identify the difference between a
failure and the battery not being there.

The next issue was in the suspend logic. It was found that if the battery
wasn't present, then it would return a failure, preventing the system from
going into suspend. If there is no battery present, the io is expected to
fail, so in that case, we shouldn't return the failure and just
acknowledge that it was expected.

I also found that when a gpio was used, i didn't maintain the internal
is_present state properly. I added a set of that to fix that.

Lastly, the code to see io's fail and figure out that the battery isn't
present when not using a gpio had a problem. In that code, it looked for
the read to fail and if it did, then handled it. The problem is that in
function to get the property, it first writes a value and that write can
fail, causing the code to never reach the logic after the read. Fix is
to move the logic till after the write.

Signed-off-by: Rhyland Klein <rklein@nvidia.com>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
drivers/power/bq20z75.c