mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 23:24:22 -04:00
Merge "usb: gsi: Add debugfs support for remote wakeup on each interface"
This commit is contained in:
commit
46bc219c59
1 changed files with 55 additions and 46 deletions
|
|
@ -204,41 +204,30 @@ static void gsi_rw_timer_func(struct timer_list *t)
|
|||
static struct f_gsi *get_connected_gsi(void)
|
||||
{
|
||||
struct f_gsi *connected_gsi;
|
||||
bool gsi_connected = false;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < IPA_USB_MAX_TETH_PROT_SIZE; i++) {
|
||||
if (inst_status[i].opts)
|
||||
connected_gsi = inst_status[i].opts->gsi;
|
||||
else
|
||||
continue;
|
||||
|
||||
if (connected_gsi && atomic_read(&connected_gsi->connected)) {
|
||||
gsi_connected = true;
|
||||
break;
|
||||
}
|
||||
if (connected_gsi && atomic_read(&connected_gsi->connected))
|
||||
return connected_gsi;
|
||||
}
|
||||
|
||||
if (!gsi_connected)
|
||||
connected_gsi = NULL;
|
||||
|
||||
return connected_gsi;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#define DEFAULT_RW_TIMER_INTERVAL 500 /* in ms */
|
||||
static ssize_t usb_gsi_rw_write(struct file *file,
|
||||
const char __user *ubuf, size_t count, loff_t *ppos)
|
||||
{
|
||||
struct f_gsi *gsi;
|
||||
struct f_gsi *gsi = NULL;
|
||||
struct usb_function *func;
|
||||
struct usb_gadget *gadget;
|
||||
u8 input;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
gsi = get_connected_gsi();
|
||||
if (!gsi) {
|
||||
log_event_dbg("%s: gsi not connected\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (ubuf == NULL) {
|
||||
log_event_dbg("%s: buffer is Null.\n", __func__);
|
||||
goto err;
|
||||
|
|
@ -250,23 +239,35 @@ static ssize_t usb_gsi_rw_write(struct file *file,
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (gsi->debugfs_rw_timer_enable == !!input) {
|
||||
if (!!input)
|
||||
log_event_dbg("%s: RW already enabled\n", __func__);
|
||||
else
|
||||
log_event_dbg("%s: RW already disabled\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
for (i = 0; i < IPA_USB_MAX_TETH_PROT_SIZE; i++) {
|
||||
gsi = NULL;
|
||||
if (inst_status[i].opts)
|
||||
gsi = inst_status[i].opts->gsi;
|
||||
|
||||
gsi->debugfs_rw_timer_enable = !!input;
|
||||
if (gsi && atomic_read(&gsi->connected)) {
|
||||
func = &gsi->function;
|
||||
gadget = func->config->cdev->gadget;
|
||||
gsi->debugfs_rw_timer_enable = !!input;
|
||||
if (gadget->speed >= USB_SPEED_SUPER &&
|
||||
!gsi->func_is_suspended) {
|
||||
gsi->debugfs_rw_timer_enable = 0;
|
||||
del_timer_sync(&gsi->gsi_rw_timer);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (gsi->debugfs_rw_timer_enable) {
|
||||
mod_timer(&gsi->gsi_rw_timer, jiffies +
|
||||
msecs_to_jiffies(gsi->gsi_rw_timer_interval));
|
||||
log_event_dbg("%s: timer initialized\n", __func__);
|
||||
} else {
|
||||
del_timer_sync(&gsi->gsi_rw_timer);
|
||||
log_event_dbg("%s: timer deleted\n", __func__);
|
||||
if (gsi->debugfs_rw_timer_enable) {
|
||||
mod_timer(&gsi->gsi_rw_timer, jiffies +
|
||||
msecs_to_jiffies(gsi->gsi_rw_timer_interval));
|
||||
log_event_dbg("%s: timer initialized\n",
|
||||
__func__);
|
||||
} else {
|
||||
del_timer_sync(&gsi->gsi_rw_timer);
|
||||
log_event_dbg("%s: timer deleted\n", __func__);
|
||||
}
|
||||
|
||||
if (gadget->speed < USB_SPEED_SUPER)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
err:
|
||||
|
|
@ -277,14 +278,19 @@ static int usb_gsi_rw_show(struct seq_file *s, void *unused)
|
|||
{
|
||||
|
||||
struct f_gsi *gsi;
|
||||
int i;
|
||||
u8 enable = 0;
|
||||
|
||||
gsi = get_connected_gsi();
|
||||
if (!gsi) {
|
||||
log_event_dbg("%s: gsi not connected\n", __func__);
|
||||
return 0;
|
||||
for (i = 0; i < IPA_USB_MAX_TETH_PROT_SIZE; i++) {
|
||||
gsi = NULL;
|
||||
if (inst_status[i].opts)
|
||||
gsi = inst_status[i].opts->gsi;
|
||||
|
||||
if (gsi && atomic_read(&gsi->connected))
|
||||
enable |= gsi->debugfs_rw_timer_enable;
|
||||
}
|
||||
|
||||
seq_printf(s, "%d\n", gsi->debugfs_rw_timer_enable);
|
||||
seq_printf(s, "%d\n", enable);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -306,16 +312,11 @@ static const struct file_operations fops_usb_gsi_rw = {
|
|||
static ssize_t usb_gsi_rw_timer_write(struct file *file,
|
||||
const char __user *ubuf, size_t count, loff_t *ppos)
|
||||
{
|
||||
struct f_gsi *gsi;
|
||||
struct f_gsi *gsi = NULL;
|
||||
u16 timer_val;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
gsi = get_connected_gsi();
|
||||
if (!gsi) {
|
||||
log_event_dbg("%s: gsi not connected\n", __func__);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (ubuf == NULL) {
|
||||
log_event_dbg("%s: buffer is NULL.\n", __func__);
|
||||
goto err;
|
||||
|
|
@ -332,7 +333,15 @@ static ssize_t usb_gsi_rw_timer_write(struct file *file,
|
|||
goto err;
|
||||
}
|
||||
|
||||
gsi->gsi_rw_timer_interval = timer_val;
|
||||
for (i = 0; i < IPA_USB_MAX_TETH_PROT_SIZE; i++) {
|
||||
gsi = NULL;
|
||||
if (inst_status[i].opts)
|
||||
gsi = inst_status[i].opts->gsi;
|
||||
|
||||
if (gsi && atomic_read(&gsi->connected))
|
||||
gsi->gsi_rw_timer_interval = timer_val;
|
||||
}
|
||||
|
||||
err:
|
||||
return count;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue