ibasso: Use generic hosted sysfs accessors

This keeps the enumerated list of sysfs parameters.

Change-Id: Ia63549809490eba02b3f75b3d2f95745636e01a9
This commit is contained in:
Solomon Peachy 2025-11-30 19:21:06 -05:00
parent d65bfff876
commit 7ffdf50ba5
11 changed files with 21 additions and 353 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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__);
}

View file

@ -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__);
}

View file

@ -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__);
}

View file

@ -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__);

View file

@ -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;
}

View file

@ -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;
}

View file

@ -25,9 +25,7 @@
#ifndef _SYSFS_IBASSO_H_
#define _SYSFS_IBASSO_H_
#include <stdbool.h>
#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

View file

@ -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__);
}