|
@@ -1174,15 +1174,16 @@ EXPORT_SYMBOL_GPL(gpiod_is_active_low);
|
|
|
* that the GPIO was actually requested.
|
|
|
*/
|
|
|
|
|
|
-static bool _gpiod_get_raw_value(const struct gpio_desc *desc)
|
|
|
+static int _gpiod_get_raw_value(const struct gpio_desc *desc)
|
|
|
{
|
|
|
struct gpio_chip *chip;
|
|
|
- bool value;
|
|
|
int offset;
|
|
|
+ int value;
|
|
|
|
|
|
chip = desc->chip;
|
|
|
offset = gpio_chip_hwgpio(desc);
|
|
|
- value = chip->get ? chip->get(chip, offset) : false;
|
|
|
+ value = chip->get ? chip->get(chip, offset) : -EIO;
|
|
|
+ value = value < 0 ? value : !!value;
|
|
|
trace_gpio_value(desc_to_gpio(desc), 1, value);
|
|
|
return value;
|
|
|
}
|
|
@@ -1192,7 +1193,7 @@ static bool _gpiod_get_raw_value(const struct gpio_desc *desc)
|
|
|
* @desc: gpio whose value will be returned
|
|
|
*
|
|
|
* Return the GPIO's raw value, i.e. the value of the physical line disregarding
|
|
|
- * its ACTIVE_LOW status.
|
|
|
+ * its ACTIVE_LOW status, or negative errno on failure.
|
|
|
*
|
|
|
* This function should be called from contexts where we cannot sleep, and will
|
|
|
* complain if the GPIO chip functions potentially sleep.
|
|
@@ -1212,7 +1213,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_raw_value);
|
|
|
* @desc: gpio whose value will be returned
|
|
|
*
|
|
|
* Return the GPIO's logical value, i.e. taking the ACTIVE_LOW status into
|
|
|
- * account.
|
|
|
+ * account, or negative errno on failure.
|
|
|
*
|
|
|
* This function should be called from contexts where we cannot sleep, and will
|
|
|
* complain if the GPIO chip functions potentially sleep.
|
|
@@ -1226,6 +1227,9 @@ int gpiod_get_value(const struct gpio_desc *desc)
|
|
|
WARN_ON(desc->chip->can_sleep);
|
|
|
|
|
|
value = _gpiod_get_raw_value(desc);
|
|
|
+ if (value < 0)
|
|
|
+ return value;
|
|
|
+
|
|
|
if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
|
|
|
value = !value;
|
|
|
|
|
@@ -1548,7 +1552,7 @@ EXPORT_SYMBOL_GPL(gpiochip_unlock_as_irq);
|
|
|
* @desc: gpio whose value will be returned
|
|
|
*
|
|
|
* Return the GPIO's raw value, i.e. the value of the physical line disregarding
|
|
|
- * its ACTIVE_LOW status.
|
|
|
+ * its ACTIVE_LOW status, or negative errno on failure.
|
|
|
*
|
|
|
* This function is to be called from contexts that can sleep.
|
|
|
*/
|
|
@@ -1566,7 +1570,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_raw_value_cansleep);
|
|
|
* @desc: gpio whose value will be returned
|
|
|
*
|
|
|
* Return the GPIO's logical value, i.e. taking the ACTIVE_LOW status into
|
|
|
- * account.
|
|
|
+ * account, or negative errno on failure.
|
|
|
*
|
|
|
* This function is to be called from contexts that can sleep.
|
|
|
*/
|
|
@@ -1579,6 +1583,9 @@ int gpiod_get_value_cansleep(const struct gpio_desc *desc)
|
|
|
return 0;
|
|
|
|
|
|
value = _gpiod_get_raw_value(desc);
|
|
|
+ if (value < 0)
|
|
|
+ return value;
|
|
|
+
|
|
|
if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
|
|
|
value = !value;
|
|
|
|