summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-10-18 10:16:27 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-10-18 10:19:42 -0400
commit6a94f1e995fee94c792a4bef2fd0bce1974ede7b (patch)
tree3170ecaf1f30cd608082099806a06752bdf55cd6
parent5f75c493e3bebc53f951b72acdf552b8a2aeb4ae (diff)
downloadrockbox-6a94f1e.tar.gz
rockbox-6a94f1e.tar.bz2
rockbox-6a94f1e.zip
sonynwz: Properly support multidrive, with hotswap of the SD card
Change-Id: I7eb8efb0986a395d5ffbcc06a54bb680e0b59e9d
-rw-r--r--firmware/export/config/samsungypr0.h1
-rw-r--r--firmware/export/config/sonynwa20.h2
-rw-r--r--firmware/export/config/sonynwza10.h2
-rw-r--r--firmware/export/config/sonynwzlinux.h13
-rw-r--r--firmware/target/hosted/sonynwz/system-nwz.c74
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 <signal.h>
#include <ucontext.h>
#include <string.h>
+#include <stdio.h>
+
#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 <backtrace.h>
-#include <stdio.h>
+
+#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 */