diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-07 01:08:44 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-07 01:08:44 +0000 |
commit | 58eca049cf800fee3f741fa34397f40dac7cb35d (patch) | |
tree | ce9a4855fd31a2dc8ea29c6abad79ea8a310795b | |
parent | 747fb65088dc3cd9e0f878ce1013e157eafb1159 (diff) | |
parent | b5592bee47fa31aea75aedaeb4826f55dbbc6403 (diff) | |
download | nanohub-android-msm-eos-android13-wear-kr3-pixel-watch.tar.gz |
Merge cherrypicks of ['partner-android-review.googlesource.com/2640861'] into android13-msm-pixelwatch-5.15-24Q1-release.android-wear-13.0.0_r0.14android-wear-13.0.0_r0.12android-msm-eos-android13-wear-kr3-pixel-watchandroid-msm-eos-5.15-tm-wear-kr3-pixel-watch
Change-Id: Idd4a423b2ba404dbf384bcdb1d0f5024dd7681e3
-rw-r--r-- | display.c | 61 | ||||
-rw-r--r-- | display.h | 5 | ||||
-rw-r--r-- | main.c | 13 | ||||
-rw-r--r-- | nanohub_exports.h | 7 |
4 files changed, 66 insertions, 20 deletions
@@ -21,6 +21,7 @@ static DEFINE_MUTEX(nanohub_display_mutex); static DECLARE_COMPLETION(message_callback); static int display_state; +static bool allow_read_mcu_disp_state_once = false; ssize_t nanohub_pin_display_select_get(struct device *dev, struct device_attribute *attr, char *buf) @@ -38,8 +39,11 @@ ssize_t nanohub_pin_display_select_set(struct device *dev, struct nanohub_data *data = dev_get_drvdata(dev); const struct nanohub_platform_data *pdata = data->pdata; if (count >= 1 && buf[0] == '0') { + allow_read_mcu_disp_state_once = false; gpio_set_value(pdata->display_select_gpio, 0); } else if (count >= 1 && buf[0] == '1') { + if (gpio_get_value(pdata->display_select_gpio) == 0) + allow_read_mcu_disp_state_once = true; gpio_set_value(pdata->display_select_gpio, 1); } return count; @@ -47,35 +51,56 @@ ssize_t nanohub_pin_display_select_set(struct device *dev, ssize_t nanohub_get_display_state(struct device *dev, struct device_attribute *attr, char *buf) { - int display_state = nanohub_query_display_state(); + struct nanohub_data *data = dev_get_drvdata(dev); + int display_state = nanohub_query_display_state_internal(data, true); + return scnprintf(buf, PAGE_SIZE, "%d", display_state); +} + +ssize_t nanohub_get_display_state_no_check(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct nanohub_data *data = dev_get_drvdata(dev); + int display_state = nanohub_query_display_state_internal(data, false); return scnprintf(buf, PAGE_SIZE, "%d", display_state); } -#define NANOHUB_DISPLAY_COMMAND_TYPE_GET_STATE 0x06 #define NANOHUB_DISPLAY_GET_STATE_TIMEOUT_MS 100 +enum nanohub_display_command_type { + NANOHUB_DISPLAY_COMMAND_GET_STATE = 0x06, + NANOHUB_DISPLAY_COMMAND_GET_STATE_NO_CHECK = 0x07, +}; + static void on_message_received(const char *buffer, size_t length) { if (length == 3 && buffer[0] == NANOHUB_DISPLAY_COMMAND_VERSION && - buffer[1] == NANOHUB_DISPLAY_COMMAND_TYPE_GET_STATE) { + buffer[1] == NANOHUB_DISPLAY_COMMAND_GET_STATE) { display_state = buffer[2]; } complete(&message_callback); } -int nanohub_query_display_state_internal(struct nanohub_data *data) +int nanohub_query_display_state_internal(struct nanohub_data *data, bool check_ownership) { const char message[] = { NANOHUB_DISPLAY_COMMAND_VERSION, - NANOHUB_DISPLAY_COMMAND_TYPE_GET_STATE }; + check_ownership ? NANOHUB_DISPLAY_COMMAND_GET_STATE : + NANOHUB_DISPLAY_COMMAND_GET_STATE_NO_CHECK }; long ret; - const struct nanohub_platform_data *pdata; - - if (unlikely(data == NULL)) - return -EINVAL; - pdata = data->pdata; - if (gpio_get_value(pdata->display_select_gpio) == 1) - return MCU_DISPLAY_NONE; + if (check_ownership) { + const struct nanohub_platform_data *pdata; + if (unlikely(data == NULL)) + return -EINVAL; + + pdata = data->pdata; + if (gpio_get_value(pdata->display_select_gpio) == 1) + return MCU_DISPLAY_NONE; + } else { + if (allow_read_mcu_disp_state_once) + allow_read_mcu_disp_state_once = false; + else + return MCU_DISPLAY_NONE; + } mutex_lock(&nanohub_display_mutex); @@ -92,11 +117,13 @@ int nanohub_query_display_state_internal(struct nanohub_data *data) mutex_unlock(&nanohub_display_mutex); - if (ret < 0) - return ret; - - if (ret == 0) - return -ETIMEDOUT; + if (ret <= 0) { + pr_err("nanohub : failed to query disp, ret = %d\n", ret); + if (ret == 0) + return -ETIMEDOUT; + else + return ret; + } return display_state; } @@ -25,6 +25,9 @@ ssize_t nanohub_pin_display_select_set(struct device *dev, ssize_t nanohub_get_display_state(struct device *dev, struct device_attribute *attr, char *buf); -int nanohub_query_display_state_internal(struct nanohub_data *data); +ssize_t nanohub_get_display_state_no_check(struct device *dev, struct device_attribute *attr, + char *buf); + +int nanohub_query_display_state_internal(struct nanohub_data *data, bool check_ownership); #endif @@ -132,6 +132,7 @@ EXPORT_SYMBOL(nanohub_send_message); EXPORT_SYMBOL(nanohub_register_listener); EXPORT_SYMBOL(nanohub_unregister_listener); EXPORT_SYMBOL(nanohub_query_display_state); +EXPORT_SYMBOL(nanohub_query_display_state_no_check); static struct class *sensor_class; static int major; @@ -1401,6 +1402,7 @@ static struct device_attribute attributes[] = { __ATTR(display_select, 0660, nanohub_pin_display_select_get, nanohub_pin_display_select_set), __ATTR(display_state, 0440, nanohub_get_display_state, NULL), + __ATTR(display_state_no_check, 0440, nanohub_get_display_state_no_check, NULL), #endif #ifdef CONFIG_NANOHUB_BL_ST __ATTR(lock, 0220, NULL, nanohub_lock_bl), @@ -1627,7 +1629,16 @@ void nanohub_unregister_listener(int channel_id) int nanohub_query_display_state(void) { #ifdef CONFIG_NANOHUB_DISPLAY - return nanohub_query_display_state_internal(priv_nanohub_data); + return nanohub_query_display_state_internal(priv_nanohub_data, true); +#else + return -ENOSYS; +#endif +} + +int nanohub_query_display_state_no_check(void) +{ +#ifdef CONFIG_NANOHUB_DISPLAY + return nanohub_query_display_state_internal(priv_nanohub_data, false); #else return -ENOSYS; #endif diff --git a/nanohub_exports.h b/nanohub_exports.h index aab40c8..9695e1b 100644 --- a/nanohub_exports.h +++ b/nanohub_exports.h @@ -65,7 +65,12 @@ enum mcu_display_mode { * Query the display power state from MCU when display is controlled by MCU. * MCU_DISPLAY_NONE, when MCU doesn't control display. */ - extern int nanohub_query_display_state(void); +/** + * Query the display power state from the MCU, regardless of whether the display is controlled by + * the MCU. + */ +extern int nanohub_query_display_state_no_check(void); + #endif /* _NANOHUB_EXPORTS_H_ */ |