|
@@ -1013,6 +1013,19 @@ static void ds_up(struct ds_info *dp)
|
|
|
dp->hs_state = DS_HS_START;
|
|
|
}
|
|
|
|
|
|
+static void ds_reset(struct ds_info *dp)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ dp->hs_state = 0;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(ds_states); i++) {
|
|
|
+ struct ds_cap_state *cp = &ds_states[i];
|
|
|
+
|
|
|
+ cp->state = CAP_STATE_UNKNOWN;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void ds_event(void *arg, int event)
|
|
|
{
|
|
|
struct ds_info *dp = arg;
|
|
@@ -1028,6 +1041,12 @@ static void ds_event(void *arg, int event)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (event == LDC_EVENT_RESET) {
|
|
|
+ ds_reset(dp);
|
|
|
+ spin_unlock_irqrestore(&ds_lock, flags);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (event != LDC_EVENT_DATA_READY) {
|
|
|
printk(KERN_WARNING PFX "Unexpected LDC event %d\n", event);
|
|
|
spin_unlock_irqrestore(&ds_lock, flags);
|