diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-10-15 10:18:16 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-10-15 10:18:16 -0400 |
commit | d544ce46a78c834492ae1116cd1d1e47cb9d8cb0 (patch) | |
tree | 8b17557587863e497f7aee421efe86192ec0ea4e /firmware | |
parent | 4873a1ac6177cf7319160d4fa290fe2b17615763 (diff) | |
download | rockbox-d544ce46a78c834492ae1116cd1d1e47cb9d8cb0.tar.gz rockbox-d544ce46a78c834492ae1116cd1d1e47cb9d8cb0.zip |
hosted: Unify the USB code for the hiby-based players.
* Specify exported USB VID/PID in target config header
* Don't fail if the sd filesystem has already been remounted
(ie due to platform hotplug)
Change-Id: Ifd2dae0c4f15086bf2bf89eb093018b3c4d2b75d
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/SOURCES | 7 | ||||
-rw-r--r-- | firmware/export/config/agptekrocker.h | 4 | ||||
-rw-r--r-- | firmware/export/config/aigoerosq.h | 4 | ||||
-rw-r--r-- | firmware/export/config/xduoox20.h | 4 | ||||
-rw-r--r-- | firmware/export/config/xduoox3ii.h | 4 | ||||
-rw-r--r-- | firmware/target/hosted/aigo/usb-erosq.c | 118 | ||||
-rw-r--r-- | firmware/target/hosted/usb-hiby.c (renamed from firmware/target/hosted/agptek/usb-agptek.c) | 6 | ||||
-rw-r--r-- | firmware/target/hosted/xduoo/usb-xduoo.c | 118 |
8 files changed, 23 insertions, 242 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES index 8bf3d96bdf..7f08e4870f 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES | |||
@@ -134,7 +134,6 @@ target/hosted/agptek/button-agptek.c | |||
134 | target/hosted/agptek/debug-agptek.c | 134 | target/hosted/agptek/debug-agptek.c |
135 | target/hosted/agptek/power-agptek.c | 135 | target/hosted/agptek/power-agptek.c |
136 | target/hosted/agptek/powermgmt-agptek.c | 136 | target/hosted/agptek/powermgmt-agptek.c |
137 | target/hosted/agptek/usb-agptek.c | ||
138 | #endif | 137 | #endif |
139 | 138 | ||
140 | #if (defined(XDUOO_X3II) || defined(XDUOO_X20)) && !defined(SIMULATOR) | 139 | #if (defined(XDUOO_X3II) || defined(XDUOO_X20)) && !defined(SIMULATOR) |
@@ -142,7 +141,10 @@ target/hosted/xduoo/button-xduoo.c | |||
142 | target/hosted/xduoo/debug-xduoo.c | 141 | target/hosted/xduoo/debug-xduoo.c |
143 | target/hosted/xduoo/power-xduoo.c | 142 | target/hosted/xduoo/power-xduoo.c |
144 | target/hosted/xduoo/powermgmt-xduoo.c | 143 | target/hosted/xduoo/powermgmt-xduoo.c |
145 | target/hosted/xduoo/usb-xduoo.c | 144 | #endif |
145 | |||
146 | #if defined(HIBY_LINUX) && !defined(SIMULATOR) | ||
147 | target/hosted/usb-hiby.c | ||
146 | #endif | 148 | #endif |
147 | 149 | ||
148 | #if (defined(FIIO_M3K)) && !defined(SIMULATOR) | 150 | #if (defined(FIIO_M3K)) && !defined(SIMULATOR) |
@@ -160,7 +162,6 @@ target/hosted/aigo/button-erosq.c | |||
160 | target/hosted/aigo/debug-erosq.c | 162 | target/hosted/aigo/debug-erosq.c |
161 | target/hosted/aigo/power-erosq.c | 163 | target/hosted/aigo/power-erosq.c |
162 | target/hosted/aigo/powermgmt-erosq.c | 164 | target/hosted/aigo/powermgmt-erosq.c |
163 | target/hosted/aigo/usb-erosq.c | ||
164 | #endif | 165 | #endif |
165 | 166 | ||
166 | #if defined(SAMSUNG_YPR0) && !defined(SIMULATOR) | 167 | #if defined(SAMSUNG_YPR0) && !defined(SIMULATOR) |
diff --git a/firmware/export/config/agptekrocker.h b/firmware/export/config/agptekrocker.h index f0e98d4db2..3323124900 100644 --- a/firmware/export/config/agptekrocker.h +++ b/firmware/export/config/agptekrocker.h | |||
@@ -131,3 +131,7 @@ | |||
131 | #define BOOTFILE_EXT "rocker" | 131 | #define BOOTFILE_EXT "rocker" |
132 | #define BOOTFILE "rockbox." BOOTFILE_EXT | 132 | #define BOOTFILE "rockbox." BOOTFILE_EXT |
133 | #define BOOTDIR "/.rockbox" | 133 | #define BOOTDIR "/.rockbox" |
134 | |||
135 | /* USB */ | ||
136 | #define USB_VID_STR "C502" | ||
137 | #define USB_PID_STR "0029" | ||
diff --git a/firmware/export/config/aigoerosq.h b/firmware/export/config/aigoerosq.h index 5a520707d9..d6761a4470 100644 --- a/firmware/export/config/aigoerosq.h +++ b/firmware/export/config/aigoerosq.h | |||
@@ -135,3 +135,7 @@ | |||
135 | #define BOOTFILE_EXT "erosq" | 135 | #define BOOTFILE_EXT "erosq" |
136 | #define BOOTFILE "rockbox." BOOTFILE_EXT | 136 | #define BOOTFILE "rockbox." BOOTFILE_EXT |
137 | #define BOOTDIR "/.rockbox" | 137 | #define BOOTDIR "/.rockbox" |
138 | |||
139 | /* USB */ | ||
140 | #define USB_VID_STR "C502" | ||
141 | #define USB_PID_STR "0023" | ||
diff --git a/firmware/export/config/xduoox20.h b/firmware/export/config/xduoox20.h index e12346e1bc..7266370e9d 100644 --- a/firmware/export/config/xduoox20.h +++ b/firmware/export/config/xduoox20.h | |||
@@ -131,3 +131,7 @@ | |||
131 | #define BOOTFILE "rockbox." BOOTFILE_EXT | 131 | #define BOOTFILE "rockbox." BOOTFILE_EXT |
132 | #define BOOTDIR "/.rockbox" | 132 | #define BOOTDIR "/.rockbox" |
133 | 133 | ||
134 | /* USB */ | ||
135 | #define USB_VID_STR "C502" | ||
136 | #define USB_PID_STR "003C" // XXX this is probably wrong | ||
137 | |||
diff --git a/firmware/export/config/xduoox3ii.h b/firmware/export/config/xduoox3ii.h index c9047eb224..1da6e71ade 100644 --- a/firmware/export/config/xduoox3ii.h +++ b/firmware/export/config/xduoox3ii.h | |||
@@ -133,3 +133,7 @@ | |||
133 | #define BOOTFILE_EXT "x3ii" | 133 | #define BOOTFILE_EXT "x3ii" |
134 | #define BOOTFILE "rockbox." BOOTFILE_EXT | 134 | #define BOOTFILE "rockbox." BOOTFILE_EXT |
135 | #define BOOTDIR "/.rockbox" | 135 | #define BOOTDIR "/.rockbox" |
136 | |||
137 | /* USB */ | ||
138 | #define USB_VID_STR "C502" | ||
139 | #define USB_PID_STR "003C" | ||
diff --git a/firmware/target/hosted/aigo/usb-erosq.c b/firmware/target/hosted/aigo/usb-erosq.c deleted file mode 100644 index 2a3acf4d62..0000000000 --- a/firmware/target/hosted/aigo/usb-erosq.c +++ /dev/null | |||
@@ -1,118 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___ | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2018 by Marcin Bukat | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License | ||
13 | * as published by the Free Software Foundation; either version 2 | ||
14 | * of the License, or (at your option) any later version. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #include <stdlib.h> | ||
22 | #include <sys/mount.h> | ||
23 | #include <string.h> | ||
24 | #include "config.h" | ||
25 | #include "disk.h" | ||
26 | #include "usb.h" | ||
27 | #include "sysfs.h" | ||
28 | #include "power.h" | ||
29 | #include "power-erosq.h" | ||
30 | |||
31 | static bool adb_mode = false; | ||
32 | |||
33 | /* TODO: implement usb detection properly */ | ||
34 | int usb_detect(void) | ||
35 | { | ||
36 | return power_input_status() == POWER_INPUT_USB_CHARGER ? USB_INSERTED : USB_EXTRACTED; | ||
37 | } | ||
38 | |||
39 | void usb_enable(bool on) | ||
40 | { | ||
41 | /* Ignore usb enable/disable when ADB is enabled so we can fireup adb shell | ||
42 | * without entering ums mode | ||
43 | */ | ||
44 | if (!adb_mode) | ||
45 | { | ||
46 | sysfs_set_int("/sys/class/android_usb/android0/enable", on ? 1 : 0); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | /* This is called by usb thread after usb extract in order to return | ||
51 | * regular FS access | ||
52 | * | ||
53 | * returns the # of successful mounts | ||
54 | */ | ||
55 | int disk_mount_all(void) | ||
56 | { | ||
57 | const char *dev[] = {"/dev/mmcblk0p1", "/dev/mmcblk0"}; | ||
58 | const char *fs[] = {"vfat", "exfat"}; | ||
59 | |||
60 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/lun/file", ""); | ||
61 | |||
62 | for (int i=0; i<2; i++) | ||
63 | { | ||
64 | for (int j=0; j<2; j++) | ||
65 | { | ||
66 | if (mount(dev[i], "/mnt/sd_0", fs[j], 0, NULL) == 0) | ||
67 | { | ||
68 | return 1; | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | |||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | /* This is called by usb thread after all threads ACKs usb inserted message | ||
77 | * | ||
78 | * returns the # of successful unmounts | ||
79 | */ | ||
80 | int disk_unmount_all(void) | ||
81 | { | ||
82 | if (umount("/mnt/sd_0") == 0) | ||
83 | { | ||
84 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/lun/file", "/dev/mmcblk0"); | ||
85 | return 1; | ||
86 | } | ||
87 | |||
88 | return 0; | ||
89 | } | ||
90 | |||
91 | void usb_init_device(void) | ||
92 | { | ||
93 | char functions[32] = {0}; | ||
94 | |||
95 | /* Check if ADB was activated in bootloader */ | ||
96 | sysfs_get_string("/sys/class/android_usb/android0/functions", functions, sizeof(functions)); | ||
97 | adb_mode = (strstr(functions, "adb") == NULL) ? false : true; | ||
98 | |||
99 | usb_enable(false); | ||
100 | |||
101 | if (adb_mode) | ||
102 | { | ||
103 | sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage,adb"); | ||
104 | sysfs_set_string("/sys/class/android_usb/android0/idVendor", "18D1"); | ||
105 | sysfs_set_string("/sys/class/android_usb/android0/idProduct", "D002"); | ||
106 | } | ||
107 | else | ||
108 | { | ||
109 | sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage"); | ||
110 | sysfs_set_string("/sys/class/android_usb/android0/idVendor", "C502"); | ||
111 | sysfs_set_string("/sys/class/android_usb/android0/idProduct", "0023"); | ||
112 | } | ||
113 | |||
114 | sysfs_set_string("/sys/class/android_usb/android0/iManufacturer", "Rockbox.org"); | ||
115 | sysfs_set_string("/sys/class/android_usb/android0/iProduct", "Rockbox media player"); | ||
116 | sysfs_set_string("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF"); | ||
117 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/inquiry_string", "ErosQ 0100"); | ||
118 | } | ||
diff --git a/firmware/target/hosted/agptek/usb-agptek.c b/firmware/target/hosted/usb-hiby.c index 6c805edb5a..6c35e76e29 100644 --- a/firmware/target/hosted/agptek/usb-agptek.c +++ b/firmware/target/hosted/usb-hiby.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include "usb.h" | 26 | #include "usb.h" |
27 | #include "sysfs.h" | 27 | #include "sysfs.h" |
28 | #include "power.h" | 28 | #include "power.h" |
29 | #include "power-agptek.h" | ||
30 | 29 | ||
31 | static bool adb_mode = false; | 30 | static bool adb_mode = false; |
32 | 31 | ||
@@ -63,7 +62,8 @@ int disk_mount_all(void) | |||
63 | { | 62 | { |
64 | for (int j=0; j<2; j++) | 63 | for (int j=0; j<2; j++) |
65 | { | 64 | { |
66 | if (mount(dev[i], "/mnt/sd_0", fs[j], 0, NULL) == 0) | 65 | int rval = mount(dev[i], PIVOT_ROOT, fs[j], 0, NULL); |
66 | if (rval == 0 || errno == -EBUSY) | ||
67 | { | 67 | { |
68 | return 1; | 68 | return 1; |
69 | } | 69 | } |
@@ -114,5 +114,5 @@ void usb_init_device(void) | |||
114 | sysfs_set_string("/sys/class/android_usb/android0/iManufacturer", "Rockbox.org"); | 114 | sysfs_set_string("/sys/class/android_usb/android0/iManufacturer", "Rockbox.org"); |
115 | sysfs_set_string("/sys/class/android_usb/android0/iProduct", "Rockbox media player"); | 115 | sysfs_set_string("/sys/class/android_usb/android0/iProduct", "Rockbox media player"); |
116 | sysfs_set_string("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF"); | 116 | sysfs_set_string("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF"); |
117 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/inquiry_string", "Agptek Rocker 0100"); | 117 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/inquiry_string", "Rockbox 0100"); |
118 | } | 118 | } |
diff --git a/firmware/target/hosted/xduoo/usb-xduoo.c b/firmware/target/hosted/xduoo/usb-xduoo.c deleted file mode 100644 index 19248ad262..0000000000 --- a/firmware/target/hosted/xduoo/usb-xduoo.c +++ /dev/null | |||
@@ -1,118 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___ | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2018 by Marcin Bukat | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License | ||
13 | * as published by the Free Software Foundation; either version 2 | ||
14 | * of the License, or (at your option) any later version. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #include <stdlib.h> | ||
22 | #include <sys/mount.h> | ||
23 | #include <string.h> | ||
24 | #include "config.h" | ||
25 | #include "disk.h" | ||
26 | #include "usb.h" | ||
27 | #include "sysfs.h" | ||
28 | #include "power.h" | ||
29 | #include "power-xduoo.h" | ||
30 | |||
31 | static bool adb_mode = false; | ||
32 | |||
33 | /* TODO: implement usb detection properly */ | ||
34 | int usb_detect(void) | ||
35 | { | ||
36 | return power_input_status() == POWER_INPUT_USB_CHARGER ? USB_INSERTED : USB_EXTRACTED; | ||
37 | } | ||
38 | |||
39 | void usb_enable(bool on) | ||
40 | { | ||
41 | /* Ignore usb enable/disable when ADB is enabled so we can fireup adb shell | ||
42 | * without entering ums mode | ||
43 | */ | ||
44 | if (!adb_mode) | ||
45 | { | ||
46 | sysfs_set_int("/sys/class/android_usb/android0/enable", on ? 1 : 0); | ||
47 | } | ||
48 | } | ||
49 | |||
50 | /* This is called by usb thread after usb extract in order to return | ||
51 | * regular FS access | ||
52 | * | ||
53 | * returns the # of successful mounts | ||
54 | */ | ||
55 | int disk_mount_all(void) | ||
56 | { | ||
57 | const char *dev[] = {"/dev/mmcblk0p1", "/dev/mmcblk0"}; | ||
58 | const char *fs[] = {"vfat", "exfat"}; | ||
59 | |||
60 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/lun/file", ""); | ||
61 | |||
62 | for (int i=0; i<2; i++) | ||
63 | { | ||
64 | for (int j=0; j<2; j++) | ||
65 | { | ||
66 | if (mount(dev[i], "/mnt/sd_0", fs[j], 0, NULL) == 0) | ||
67 | { | ||
68 | return 1; | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | |||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | /* This is called by usb thread after all threads ACKs usb inserted message | ||
77 | * | ||
78 | * returns the # of successful unmounts | ||
79 | */ | ||
80 | int disk_unmount_all(void) | ||
81 | { | ||
82 | if (umount("/mnt/sd_0") == 0) | ||
83 | { | ||
84 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/lun/file", "/dev/mmcblk0"); | ||
85 | return 1; | ||
86 | } | ||
87 | |||
88 | return 0; | ||
89 | } | ||
90 | |||
91 | void usb_init_device(void) | ||
92 | { | ||
93 | char functions[32] = {0}; | ||
94 | |||
95 | /* Check if ADB was activated in bootloader */ | ||
96 | sysfs_get_string("/sys/class/android_usb/android0/functions", functions, sizeof(functions)); | ||
97 | adb_mode = (strstr(functions, "adb") == NULL) ? false : true; | ||
98 | |||
99 | usb_enable(false); | ||
100 | |||
101 | if (adb_mode) | ||
102 | { | ||
103 | sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage,adb"); | ||
104 | sysfs_set_string("/sys/class/android_usb/android0/idVendor", "18D1"); | ||
105 | sysfs_set_string("/sys/class/android_usb/android0/idProduct", "D002"); | ||
106 | } | ||
107 | else | ||
108 | { | ||
109 | sysfs_set_string("/sys/class/android_usb/android0/functions", "mass_storage"); | ||
110 | sysfs_set_string("/sys/class/android_usb/android0/idVendor", "C502"); | ||
111 | sysfs_set_string("/sys/class/android_usb/android0/idProduct", "0029"); | ||
112 | } | ||
113 | |||
114 | sysfs_set_string("/sys/class/android_usb/android0/iManufacturer", "Rockbox.org"); | ||
115 | sysfs_set_string("/sys/class/android_usb/android0/iProduct", "Rockbox media player"); | ||
116 | sysfs_set_string("/sys/class/android_usb/android0/iSerial", "0123456789ABCDEF"); | ||
117 | sysfs_set_string("/sys/class/android_usb/android0/f_mass_storage/inquiry_string", "xDuoo 0100"); | ||
118 | } | ||