-
-
Save rugameuser/0df9d1f44a05a6603a1b48d0b670c5b9 to your computer and use it in GitHub Desktop.
A recent patch to add CD-ROM emulation to your Android kernel (3.18+).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 45b0c1da3ed92b232b35cc2922e696a5d0fc5c16 Mon Sep 17 00:00:00 2001 | |
From: MusiKid | |
Date: Sat, 23 Sep 2017 19:46:02 +0200 | |
Subject: [PATCH] Add CD-ROM emulation support. | |
# This is a recent patch to add CD-ROM emulation to your kernel | |
--- | |
drivers/usb/gadget/function/f_mass_storage.c | 25 +++++++++++++++++++++++++ | |
drivers/usb/gadget/function/storage_common.c | 4 ++-- | |
2 files changed, 27 insertions(+), 2 deletions(-) | |
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c | |
index 99d8675483e..bea106f3d00 100644 | |
--- a/drivers/usb/gadget/function/f_mass_storage.c | |
+++ b/drivers/usb/gadget/function/f_mass_storage.c | |
@@ -2813,6 +2813,14 @@ static ssize_t file_show(struct device *dev, struct device_attribute *attr, | |
return fsg_show_file(curlun, filesem, buf); | |
} | |
+static ssize_t cdrom_show(struct device *dev, struct device_attribute *attr, | |
+ char *buf) | |
+{ | |
+ struct fsg_lun *curlun = fsg_lun_from_dev(dev); | |
+ | |
+ return fsg_show_cdrom(curlun, buf); | |
+} | |
+ | |
static ssize_t ro_store(struct device *dev, struct device_attribute *attr, | |
const char *buf, size_t count) | |
{ | |
@@ -2830,6 +2838,16 @@ static ssize_t nofua_store(struct device *dev, struct device_attribute *attr, | |
return fsg_store_nofua(curlun, buf, count); | |
} | |
+static ssize_t cdrom_store(struct device *dev, struct device_attribute *attr, | |
+ const char *buf, size_t count) | |
+{ | |
+ struct fsg_lun *curlun = fsg_lun_from_dev(dev); | |
+ struct rw_semaphore *filesem = dev_get_drvdata(dev); | |
+ | |
+ return fsg_store_cdrom(curlun, filesem, buf, count); | |
+} | |
+ | |
+ | |
static ssize_t file_store(struct device *dev, struct device_attribute *attr, | |
const char *buf, size_t count) | |
{ | |
@@ -2842,8 +2860,10 @@ static ssize_t file_store(struct device *dev, struct device_attribute *attr, | |
static DEVICE_ATTR_RW(ro); | |
static DEVICE_ATTR_RW(nofua); | |
static DEVICE_ATTR_RW(file); | |
+static DEVICE_ATTR_RW(cdrom); | |
static DEVICE_ATTR(perf, 0644, fsg_show_perf, fsg_store_perf); | |
+ | |
static struct device_attribute dev_attr_ro_cdrom = __ATTR_RO(ro); | |
static struct device_attribute dev_attr_file_nonremovable = __ATTR_RO(file); | |
@@ -2993,6 +3013,7 @@ static inline void fsg_common_remove_sysfs(struct fsg_lun *lun) | |
device_remove_file(&lun->dev, &dev_attr_ro); | |
device_remove_file(&lun->dev, &dev_attr_file); | |
device_remove_file(&lun->dev, &dev_attr_perf); | |
+ device_remove_file(&lun->dev, &dev_attr_cdrom); | |
} | |
void fsg_common_remove_lun(struct fsg_lun *lun, bool sysfs) | |
@@ -3115,6 +3136,10 @@ static inline int fsg_common_add_sysfs(struct fsg_common *common, | |
return rc; | |
} | |
+ rc = device_create_file(&lun->dev, &dev_attr_cdrom); | |
+ if (rc) | |
+ goto error; | |
+ | |
rc = device_create_file(&lun->dev, | |
lun->cdrom | |
? &dev_attr_ro_cdrom | |
diff --git a/drivers/usb/gadget/function/storage_common.c b/drivers/usb/gadget/function/storage_common.c | |
index 69796530f2b..1328f32a812 100644 | |
--- a/drivers/usb/gadget/function/storage_common.c | |
+++ b/drivers/usb/gadget/function/storage_common.c | |
@@ -498,8 +498,8 @@ EXPORT_SYMBOL_GPL(fsg_store_file); | |
ssize_t fsg_store_cdrom(struct fsg_lun *curlun, struct rw_semaphore *filesem, | |
const char *buf, size_t count) | |
{ | |
- bool cdrom; | |
- int ret; | |
+ int cdrom; | |
+ ssize_t ret; | |
ret = strtobool(buf, &cdrom); | |
if (ret) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment