From 6a94f1e995fee94c792a4bef2fd0bce1974ede7b Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Sun, 18 Oct 2020 10:16:27 -0400 Subject: sonynwz: Properly support multidrive, with hotswap of the SD card Change-Id: I7eb8efb0986a395d5ffbcc06a54bb680e0b59e9d --- firmware/export/config/samsungypr0.h | 1 + firmware/export/config/sonynwa20.h | 2 + firmware/export/config/sonynwza10.h | 2 + firmware/export/config/sonynwzlinux.h | 13 +++-- firmware/target/hosted/sonynwz/system-nwz.c | 74 +++++++++++++++++++++++++---- 5 files changed, 81 insertions(+), 11 deletions(-) diff --git a/firmware/export/config/samsungypr0.h b/firmware/export/config/samsungypr0.h index 286299bf81..29c565c525 100644 --- a/firmware/export/config/samsungypr0.h +++ b/firmware/export/config/samsungypr0.h @@ -169,3 +169,4 @@ #define HAVE_HOTSWAP #define HAVE_STORAGE_FLUSH #define MULTIDRIVE_DIR "/mnt/mmc" +#define MULTIDRIVE_DEV "/sys/block/mmcblk0" diff --git a/firmware/export/config/sonynwa20.h b/firmware/export/config/sonynwa20.h index d9f6292459..e5380114b7 100644 --- a/firmware/export/config/sonynwa20.h +++ b/firmware/export/config/sonynwa20.h @@ -13,4 +13,6 @@ /* sqrt(240^2 + 320^2) / 2 = 200 */ #define LCD_DPI 200 +#define NWZ_HAS_SD + #include "sonynwzlinux.h" diff --git a/firmware/export/config/sonynwza10.h b/firmware/export/config/sonynwza10.h index a0650cf22d..750a4d59d7 100644 --- a/firmware/export/config/sonynwza10.h +++ b/firmware/export/config/sonynwza10.h @@ -13,4 +13,6 @@ /* sqrt(240^2 + 320^2) / 2 = 200 */ #define LCD_DPI 200 +#define NWZ_HAS_SD + #include "sonynwzlinux.h" diff --git a/firmware/export/config/sonynwzlinux.h b/firmware/export/config/sonynwzlinux.h index 074ad1c417..71affd1584 100644 --- a/firmware/export/config/sonynwzlinux.h +++ b/firmware/export/config/sonynwzlinux.h @@ -57,9 +57,6 @@ /* The number of bytes reserved for loadable plugins */ #define PLUGIN_BUFFER_SIZE 0x100000 - - - #define CONFIG_TUNER SI4700 /* There is no hardware tone control */ @@ -105,8 +102,18 @@ /* Define this to the CPU frequency */ #define CPU_FREQ 532000000 +#ifdef NWZ_HAS_SD +/* External SD card can be mounted */ +#define CONFIG_STORAGE (STORAGE_HOSTFS|STORAGE_SD) +#define HAVE_MULTIDRIVE /* But _not_ CONFIG_STORAGE_MULTI */ +#define NUM_DRIVES 2 +#define HAVE_HOTSWAP +#define MULTIDRIVE_DIR "/mnt/media" +#define MULTIDRIVE_DEV "/sys/block/mmcblk1" +#else /* No special storage */ #define CONFIG_STORAGE STORAGE_HOSTFS +#endif #define HAVE_STORAGE_FLUSH /* Battery */ diff --git a/firmware/target/hosted/sonynwz/system-nwz.c b/firmware/target/hosted/sonynwz/system-nwz.c index c10c26250b..00a3b77252 100644 --- a/firmware/target/hosted/sonynwz/system-nwz.c +++ b/firmware/target/hosted/sonynwz/system-nwz.c @@ -1,10 +1,10 @@ /*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ * * Copyright (C) 2016 Amaury Pouly * @@ -23,20 +23,24 @@ #include #include #include +#include + #include "system.h" #include "lcd.h" #include "font.h" -#include "logf.h" #include "system.h" #include "backlight-target.h" #include "button.h" #include "adc.h" #include "power.h" +#include "mv.h" #include "power-nwz.h" #include -#include + +#include "logf.h" static const char **kern_mod_list; +bool os_file_exists(const char *ospath); void power_off(void) { @@ -238,3 +242,57 @@ bool nwz_is_kernel_module_loaded(const char *name) return true; return false; } + +#ifdef CONFIG_STORAGE_MULTI +int hostfs_driver_type(int drive) +{ + return drive > 0 ? STORAGE_SD_NUM : STORAGE_HOSTFS_NUM; +} +#endif /* CONFIG_STORAGE_MULTI */ + +#ifdef HAVE_HOTSWAP +bool hostfs_removable(IF_MD_NONVOID(int volume)) +{ +#ifdef HAVE_MULTIDRIVE + if (volume > 0) + return true; + else +#endif + return false; /* internal: always present */ +} + +bool hostfs_present(int volume) +{ +#ifdef HAVE_MULTIDRIVE + if (volume > 0) +#if defined(MULTIDRIVE_DEV) + return os_file_exists(MULTIDRIVE_DEV); +#else + return true; // FIXME? +#endif + else +#endif + return true; /* internal: always present */ +} +#endif /* HAVE_HOTSWAP */ + +#ifdef HAVE_MULTIDRIVE +int volume_drive(int drive) +{ + return drive; +} +#endif /* HAVE_MULTIDRIVE */ + +#ifdef HAVE_HOTSWAP +bool volume_removable(IF_MV_NONVOID(int volume)) +{ + /* don't support more than one partition yet, so volume == drive */ + return hostfs_removable(volume); +} + +bool volume_present(int volume) +{ + /* don't support more than one partition yet, so volume == drive */ + return hostfs_present(volume); +} +#endif /* HAVE_HOTSWAP */ -- cgit v1.2.3