Skip to content

Instantly share code, notes, and snippets.

@rugameuser
Forked from saidsay-so/cdrom-emulation.patch
Created January 9, 2024 21:12
Show Gist options
  • Save rugameuser/0df9d1f44a05a6603a1b48d0b670c5b9 to your computer and use it in GitHub Desktop.
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+).
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