From 7ffdf50ba5b4fb5fb03c5e23365b05dccd1b22e6 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Sun, 30 Nov 2025 19:21:06 -0500 Subject: [PATCH] ibasso: Use generic hosted sysfs accessors This keeps the enumerated list of sysfs parameters. Change-Id: Ia63549809490eba02b3f75b3d2f95745636e01a9 --- firmware/SOURCES | 1 + .../target/hosted/ibasso/backlight-ibasso.c | 6 +- firmware/target/hosted/ibasso/button-ibasso.c | 2 +- .../target/hosted/ibasso/dx50/audiohw-dx50.c | 4 +- .../target/hosted/ibasso/dx90/audiohw-dx90.c | 2 +- firmware/target/hosted/ibasso/lcd-ibasso.c | 4 +- firmware/target/hosted/ibasso/pcm-ibasso.c | 2 +- .../target/hosted/ibasso/powermgmt-ibasso.c | 10 +- firmware/target/hosted/ibasso/sysfs-ibasso.c | 291 +----------------- firmware/target/hosted/ibasso/sysfs-ibasso.h | 48 +-- firmware/target/hosted/ibasso/system-ibasso.c | 4 +- 11 files changed, 21 insertions(+), 353 deletions(-) diff --git a/firmware/SOURCES b/firmware/SOURCES index f17ee5d330..57c58ead83 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -2063,6 +2063,7 @@ target/hosted/ibasso/pcm-ibasso.c target/hosted/ibasso/power-ibasso.c target/hosted/ibasso/powermgmt-ibasso.c target/hosted/ibasso/sysfs-ibasso.c +target/hosted/sysfs.c target/hosted/ibasso/system-ibasso.c target/hosted/ibasso/usb-ibasso.c target/hosted/ibasso/vold-ibasso.c diff --git a/firmware/target/hosted/ibasso/backlight-ibasso.c b/firmware/target/hosted/ibasso/backlight-ibasso.c index 907980e01a..c08e34f7c6 100644 --- a/firmware/target/hosted/ibasso/backlight-ibasso.c +++ b/firmware/target/hosted/ibasso/backlight-ibasso.c @@ -48,7 +48,7 @@ bool backlight_hw_init(void) /sys/devices/platform/rk29_backlight/backlight/rk28_bl/bl_power 0: backlight on */ - if(! sysfs_set_int(SYSFS_BACKLIGHT_POWER, 0)) + if(! sysfs_set_int(sysfs_paths[SYSFS_BACKLIGHT_POWER], 0)) { DEBUGF("ERROR %s: Can not enable backlight.", __func__); panicf("ERROR %s: Can not enable backlight.", __func__); @@ -79,7 +79,7 @@ void backlight_hw_off(void) /sys/devices/platform/rk29_backlight/backlight/rk28_bl/bl_power 1: backlight off */ - if(! sysfs_set_int(SYSFS_BACKLIGHT_POWER, 1)) + if(! sysfs_set_int(sysfs_paths[SYSFS_BACKLIGHT_POWER], 1)) { DEBUGF("ERROR %s: Can not disable backlight.", __func__); return; @@ -124,7 +124,7 @@ void backlight_hw_brightness(int brightness) /sys/devices/platform/rk29_backlight/backlight/rk28_bl/max_brightness 0 ... 255 */ - if(! sysfs_set_int(SYSFS_BACKLIGHT_BRIGHTNESS, _current_brightness)) + if(! sysfs_set_int(sysfs_paths[SYSFS_BACKLIGHT_BRIGHTNESS], _current_brightness)) { DEBUGF("ERROR %s: Can not set brightness.", __func__); return; diff --git a/firmware/target/hosted/ibasso/button-ibasso.c b/firmware/target/hosted/ibasso/button-ibasso.c index a9bd82540d..8425af4052 100644 --- a/firmware/target/hosted/ibasso/button-ibasso.c +++ b/firmware/target/hosted/ibasso/button-ibasso.c @@ -94,7 +94,7 @@ static bool _hold = false; bool button_hold(void) { char hold_state; - if(! sysfs_get_char(SYSFS_HOLDKEY, &hold_state)) + if(! sysfs_get_char(sysfs_paths[SYSFS_HOLDKEY], &hold_state)) { DEBUGF("ERROR %s: Can not get hold switch state.", __func__); hold_state = HOLD_SWITCH_BIT; diff --git a/firmware/target/hosted/ibasso/dx50/audiohw-dx50.c b/firmware/target/hosted/ibasso/dx50/audiohw-dx50.c index 4ed181ede9..78bd1f7620 100644 --- a/firmware/target/hosted/ibasso/dx50/audiohw-dx50.c +++ b/firmware/target/hosted/ibasso/dx50/audiohw-dx50.c @@ -61,7 +61,7 @@ void audiohw_set_volume(int volume) /dev/codec_volume 0 ... 255 */ - if(! sysfs_set_int(SYSFS_DX50_CODEC_VOLUME, volume_adjusted)) + if(! sysfs_set_int(sysfs_paths[SYSFS_DX50_CODEC_VOLUME], volume_adjusted)) { DEBUGF("ERROR %s: Can not set volume.", __func__); } @@ -72,7 +72,7 @@ void audiohw_set_filter_roll_off(int val) { DEBUGF("DEBUG %s: val: %d", __func__, val); - if(! sysfs_set_char(SYSFS_ES9018_FILTER, (char) val)) + if(! sysfs_set_char(sysfs_paths[SYSFS_ES9018_FILTER], (char) val)) { DEBUGF("ERROR %s: Can not set roll off filter.", __func__); } diff --git a/firmware/target/hosted/ibasso/dx90/audiohw-dx90.c b/firmware/target/hosted/ibasso/dx90/audiohw-dx90.c index ef18aae4bd..95ec3335f4 100644 --- a/firmware/target/hosted/ibasso/dx90/audiohw-dx90.c +++ b/firmware/target/hosted/ibasso/dx90/audiohw-dx90.c @@ -56,7 +56,7 @@ void audiohw_set_volume(int volume) /sys/class/codec/es9018_volume 0 ... 255 */ - if(! sysfs_set_int(SYSFS_DX90_ES9018_VOLUME, volume_adjusted)) + if(! sysfs_set_int(sysfs_paths[SYSFS_DX90_ES9018_VOLUME], volume_adjusted)) { DEBUGF("ERROR %s: Can not set volume.", __func__); } diff --git a/firmware/target/hosted/ibasso/lcd-ibasso.c b/firmware/target/hosted/ibasso/lcd-ibasso.c index 2098cc90e2..6096889f33 100644 --- a/firmware/target/hosted/ibasso/lcd-ibasso.c +++ b/firmware/target/hosted/ibasso/lcd-ibasso.c @@ -168,7 +168,7 @@ void lcd_enable(bool on) /sys/power/state on: Cancel suspend. */ - if(! sysfs_set_string(SYSFS_POWER_STATE, "on")) + if(! sysfs_set_string(sysfs_paths[SYSFS_POWER_STATE], "on")) { DEBUGF("ERROR %s: Can not set power state.", __func__); } @@ -192,7 +192,7 @@ void lcd_sleep(void) /sys/power/state mem: Suspend to RAM. */ - if(! sysfs_set_string(SYSFS_POWER_STATE, "mem")) + if(! sysfs_set_string(sysfs_paths[SYSFS_POWER_STATE], "mem")) { DEBUGF("ERROR %s: Can not set power state.", __func__); } diff --git a/firmware/target/hosted/ibasso/pcm-ibasso.c b/firmware/target/hosted/ibasso/pcm-ibasso.c index 889386b7c6..7857e60b6d 100644 --- a/firmware/target/hosted/ibasso/pcm-ibasso.c +++ b/firmware/target/hosted/ibasso/pcm-ibasso.c @@ -349,7 +349,7 @@ void pcm_play_dma_start(const void *addr, size_t size) DX90? */ - if(! sysfs_set_char(SYSFS_MUTE, 'B')) + if(! sysfs_set_char(sysfs_paths[SYSFS_MUTE], 'B')) { DEBUGF("ERROR %s: Could not unmute.", __func__); panicf("ERROR %s: Could not unmute.", __func__); diff --git a/firmware/target/hosted/ibasso/powermgmt-ibasso.c b/firmware/target/hosted/ibasso/powermgmt-ibasso.c index ae7650bc6d..1440a9cc94 100644 --- a/firmware/target/hosted/ibasso/powermgmt-ibasso.c +++ b/firmware/target/hosted/ibasso/powermgmt-ibasso.c @@ -68,7 +68,7 @@ int _battery_voltage(void) /*TRACE;*/ if( (_battery_present == -1) - && (! sysfs_get_int(SYSFS_BATTERY_PRESENT, &_battery_present))) + && (! sysfs_get_int(sysfs_paths[SYSFS_BATTERY_PRESENT], &_battery_present))) { /* This check is only done once at startup. */ @@ -86,7 +86,7 @@ int _battery_voltage(void) /sys/class/power_supply/battery/voltage_now Voltage in microvolt. */ - if(! sysfs_get_int(SYSFS_BATTERY_VOLTAGE_NOW, &val)) + if(! sysfs_get_int(sysfs_paths[SYSFS_BATTERY_VOLTAGE_NOW], &val)) { DEBUGF("ERROR %s: Can not get current battery voltage.", __func__); return 0; @@ -103,7 +103,7 @@ int _battery_voltage(void) /sys/class/power_supply/usb/voltage_now Voltage in microvolt. */ - if(! sysfs_get_int(SYSFS_USB_POWER_VOLTAGE_NOW, &val)) + if(! sysfs_get_int(sysfs_paths[SYSFS_USB_POWER_VOLTAGE_NOW], &val)) { DEBUGF("ERROR %s: Can not get current USB voltage.", __func__); return 0; @@ -125,7 +125,7 @@ bool charging_state(void) { if ((current_tick - last_tick) > HZ/2 ) { char buf[12] = {0}; - sysfs_get_string(SYSFS_BATTERY_STATUS, buf, sizeof(buf)); + sysfs_get_string(sysfs_paths[SYSFS_BATTERY_STATUS], buf, sizeof(buf)); last_tick = current_tick; last_power = (strncmp(buf, "Charging", 8) == 0); @@ -136,7 +136,7 @@ bool charging_state(void) unsigned int power_input_status(void) { int present = 0; - sysfs_get_int(SYSFS_USB_POWER_ONLINE, &present); + sysfs_get_int(sysfs_paths[SYSFS_USB_POWER_ONLINE], &present); return present ? POWER_INPUT_USB_CHARGER : POWER_INPUT_NONE; } diff --git a/firmware/target/hosted/ibasso/sysfs-ibasso.c b/firmware/target/hosted/ibasso/sysfs-ibasso.c index e3a0f911af..19fc4235d7 100644 --- a/firmware/target/hosted/ibasso/sysfs-ibasso.c +++ b/firmware/target/hosted/ibasso/sysfs-ibasso.c @@ -31,8 +31,7 @@ #include "debug-ibasso.h" #include "sysfs-ibasso.h" - -static const char* const SYSFS_PATHS[] = +const char* const sysfs_paths[] = { /* SYSFS_DX50_CODEC_VOLUME */ "/dev/codec_volume", @@ -118,291 +117,3 @@ static const char* const SYSFS_PATHS[] = /* SYSFS_POWER_WAKE_LOCK */ "/sys/power/wake_lock" }; - - -static FILE* open_read(const char* file_name) -{ - FILE *f = fopen(file_name, "re"); - if(f == NULL) - { - DEBUGF("ERROR %s: Can not open %s for reading.", __func__, file_name); - } - - return f; -} - - -static FILE* open_write(const char* file_name) -{ - FILE *f = fopen(file_name, "we"); - if(f == NULL) - { - DEBUGF("ERROR %s: Can not open %s for writing.", __func__, file_name); - } - - return f; -} - - -bool sysfs_get_int(enum sys_fs_interface_id id, int* value) -{ - *value = -1; - - switch(id) - { - case SYSFS_BATTERY_CAPACITY: - case SYSFS_BATTERY_CURRENT_NOW: - case SYSFS_BATTERY_ENERGY_FULL_DESIGN: - case SYSFS_BATTERY_ONLINE: - case SYSFS_BATTERY_PRESENT: - case SYSFS_BATTERY_TEMP: - case SYSFS_BATTERY_VOLTAGE_MAX_DESIGN: - case SYSFS_BATTERY_VOLTAGE_MIN_DESIGN: - case SYSFS_BATTERY_VOLTAGE_NOW: - case SYSFS_USB_POWER_CURRENT_NOW: - case SYSFS_USB_POWER_VOLTAGE_NOW: - case SYSFS_USB_POWER_ONLINE: - case SYSFS_USB_POWER_PRESENT: - { - break; - } - - default: - { - DEBUGF("ERROR %s: Unknown interface id: %d.", __func__, id); - return false; - } - } - - const char* interface = SYSFS_PATHS[id]; - - /*DEBUGF("%s: interface: %s.", __func__, interface);*/ - - FILE *f = open_read(interface); - if(f == NULL) - { - return false; - } - - bool success = true; - if(fscanf(f, "%d", value) == EOF) - { - DEBUGF("ERROR %s: Read failed for %s.", __func__, interface); - success = false; - } - - fclose(f); - return success; -} - - -bool sysfs_set_int(enum sys_fs_interface_id id, int value) -{ - switch(id) - { - case SYSFS_BACKLIGHT_POWER: - case SYSFS_BACKLIGHT_BRIGHTNESS: - case SYSFS_DX50_CODEC_VOLUME: - case SYSFS_DX90_ES9018_VOLUME: - { - break; - } - - default: - { - DEBUGF("ERROR %s: Unknown interface id: %d.", __func__, id); - return false; - } - } - - const char* interface = SYSFS_PATHS[id]; - - /*DEBUGF("%s: interface: %s, value: %d.", __func__, interface, value);*/ - - FILE *f = open_write(interface); - if(f == NULL) - { - return false; - } - - bool success = true; - if(fprintf(f, "%d", value) < 1) - { - DEBUGF("ERROR %s: Write failed for %s.", __func__, interface); - success = false; - } - - fclose(f); - return success; -} - - -bool sysfs_get_char(enum sys_fs_interface_id id, char* value) -{ - *value = '\0'; - - switch(id) - { - case SYSFS_HOLDKEY: - { - break; - } - - default: - { - DEBUGF("ERROR %s: Unknown interface id: %d.", __func__, id); - return false; - } - } - - const char* interface = SYSFS_PATHS[id]; - - /*DEBUGF("%s: interface: %s.", __func__, interface);*/ - - FILE *f = open_read(interface); - if(f == NULL) - { - return false; - } - - bool success = true; - if(fscanf(f, "%c", value) == EOF) - { - DEBUGF("ERROR %s: Read failed for %s.", __func__, interface); - success = false; - } - - fclose(f); - return success; -} - - -bool sysfs_set_char(enum sys_fs_interface_id id, char value) -{ - switch(id) - { - case SYSFS_MUTE: - case SYSFS_WM8740_MUTE: - case SYSFS_ES9018_FILTER: - { - break; - } - - default: - { - DEBUGF("ERROR %s: Unknown interface id: %d.", __func__, id); - return false; - } - } - - const char* interface = SYSFS_PATHS[id]; - - /*DEBUGF("%s: interface: %s, value: %c.", __func__, interface, value);*/ - - FILE *f = open_write(interface); - if(f == NULL) - { - return false; - } - - bool success = true; - if(fprintf(f, "%c", value) < 1) - { - DEBUGF("ERROR %s: Write failed for %s.", __func__, interface); - success = false; - } - - fclose(f); - return success; -} - - -bool sysfs_get_string(enum sys_fs_interface_id id, char* value, int size) -{ - value[0] = '\0'; - - switch(id) - { - case SYSFS_BATTERY_STATUS: - case SYSFS_BATTERY_HEALTH: - case SYSFS_BATTERY_MODEL_NAME: - case SYSFS_BATTERY_TECHNOLOGY: - case SYSFS_BATTERY_TYPE: - { - break; - } - - default: - { - DEBUGF("ERROR %s: Unknown interface id: %d.", __func__, id); - return false; - } - } - - const char* interface = SYSFS_PATHS[id]; - - /*DEBUGF("%s: interface: %s, size: %d.", __func__, interface, size);*/ - - FILE *f = open_read(interface); - if(f == NULL) - { - return false; - } - - bool success = true; - if(fgets(value, size, f) == NULL) - { - DEBUGF("ERROR %s: Read failed for %s.", __func__, interface); - success = false; - } - else - { - size_t length = strlen(value); - if((length > 0) && value[length - 1] == '\n') - { - value[length - 1] = '\0'; - } - } - - fclose(f); - return success; -} - - -bool sysfs_set_string(enum sys_fs_interface_id id, char* value) -{ - switch(id) - { - case SYSFS_POWER_STATE: - case SYSFS_POWER_WAKE_LOCK: - { - break; - } - - default: - { - DEBUGF("ERROR %s: Unknown interface id: %d.", __func__, id); - return false; - } - } - - const char* interface = SYSFS_PATHS[id]; - - /*DEBUGF("%s: interface: %s, value: %s.", __func__, interface, value);*/ - - FILE *f = open_write(interface); - if(f == NULL) - { - return false; - } - - bool success = true; - if(fprintf(f, "%s", value) < 1) - { - DEBUGF("ERROR %s: Write failed for %s.", __func__, interface); - success = false; - } - - fclose(f); - return success; -} diff --git a/firmware/target/hosted/ibasso/sysfs-ibasso.h b/firmware/target/hosted/ibasso/sysfs-ibasso.h index 23e562c296..944993f46c 100644 --- a/firmware/target/hosted/ibasso/sysfs-ibasso.h +++ b/firmware/target/hosted/ibasso/sysfs-ibasso.h @@ -25,9 +25,7 @@ #ifndef _SYSFS_IBASSO_H_ #define _SYSFS_IBASSO_H_ - -#include - +#include "sysfs.h" /* Sys FS path identifiers. @@ -65,48 +63,6 @@ enum sys_fs_interface_id SYSFS_POWER_WAKE_LOCK }; - -/* - Read a integer value from the sys fs interface given by id. - Returns true on success, false else. -*/ -bool sysfs_get_int(enum sys_fs_interface_id id, int* value); - - -/* - Write a integer value to the sys fs interface given by id. - Returns true on success, false else. -*/ -bool sysfs_set_int(enum sys_fs_interface_id id, int value); - - -/* - Read a char value from the sys fs interface given by id. - Returns true on success, false else. -*/ -bool sysfs_get_char(enum sys_fs_interface_id id, char* value); - - -/* - Write a char value to the sys fs interface given by id. - Returns true on success, false else. -*/ -bool sysfs_set_char(enum sys_fs_interface_id id, char value); - -/* - Read a single line of text from the sys fs interface given by id. - A newline will be discarded. - size: The size of value. - Returns true on success, false else. -*/ -bool sysfs_get_string(enum sys_fs_interface_id id, char* value, int size); - - -/* - Write text to the sys fs interface given by id. - Returns true on success, false else. -*/ -bool sysfs_set_string(enum sys_fs_interface_id id, char* value); - +extern const char* const sysfs_paths[]; #endif diff --git a/firmware/target/hosted/ibasso/system-ibasso.c b/firmware/target/hosted/ibasso/system-ibasso.c index 5aa74ab6d0..24513f2cca 100644 --- a/firmware/target/hosted/ibasso/system-ibasso.c +++ b/firmware/target/hosted/ibasso/system-ibasso.c @@ -57,7 +57,7 @@ void system_init(void) Prevent device from deep sleeping, which will interrupt playback. /sys/power/wake_lock */ - if(! sysfs_set_string(SYSFS_POWER_WAKE_LOCK, "rockbox")) + if(! sysfs_set_string(sysfs_paths[SYSFS_POWER_WAKE_LOCK], "rockbox")) { DEBUGF("ERROR %s: Can not set suspend blocker.", __func__); } @@ -66,7 +66,7 @@ void system_init(void) Prevent device to mute, which will cause tinyalsa pcm_writes to fail. /sys/class/codec/wm8740_mute */ - if(! sysfs_set_char(SYSFS_WM8740_MUTE, 0)) + if(! sysfs_set_char(sysfs_paths[SYSFS_WM8740_MUTE], 0)) { DEBUGF("ERROR %s: Can not set WM8740 lock.", __func__); }