Lines Matching full:altmode

67 	struct pmic_glink_altmode *altmode;  member
107 static int pmic_glink_altmode_request(struct pmic_glink_altmode *altmode, u32 cmd, u32 arg) in pmic_glink_altmode_request() argument
117 mutex_lock(&altmode->lock); in pmic_glink_altmode_request()
119 req.hdr.owner = cpu_to_le32(altmode->owner_id); in pmic_glink_altmode_request()
125 ret = pmic_glink_send(altmode->client, &req, sizeof(req)); in pmic_glink_altmode_request()
127 dev_err(altmode->dev, "failed to send altmode request: %#x (%d)\n", cmd, ret); in pmic_glink_altmode_request()
131 left = wait_for_completion_timeout(&altmode->pan_ack, 5 * HZ); in pmic_glink_altmode_request()
133 dev_err(altmode->dev, "timeout waiting for altmode request ack for: %#x\n", cmd); in pmic_glink_altmode_request()
138 mutex_unlock(&altmode->lock); in pmic_glink_altmode_request()
142 static void pmic_glink_altmode_enable_dp(struct pmic_glink_altmode *altmode, in pmic_glink_altmode_enable_dp() argument
163 dev_err(altmode->dev, "failed to switch mux to DP: %d\n", ret); in pmic_glink_altmode_enable_dp()
171 dev_err(altmode->dev, "failed to setup retimer to DP: %d\n", ret); in pmic_glink_altmode_enable_dp()
174 static void pmic_glink_altmode_enable_usb(struct pmic_glink_altmode *altmode, in pmic_glink_altmode_enable_usb() argument
185 dev_err(altmode->dev, "failed to switch mux to USB: %d\n", ret); in pmic_glink_altmode_enable_usb()
193 dev_err(altmode->dev, "failed to setup retimer to USB: %d\n", ret); in pmic_glink_altmode_enable_usb()
196 static void pmic_glink_altmode_safe(struct pmic_glink_altmode *altmode, in pmic_glink_altmode_safe() argument
207 dev_err(altmode->dev, "failed to switch mux to safe mode: %d\n", ret); in pmic_glink_altmode_safe()
215 dev_err(altmode->dev, "failed to setup retimer to USB: %d\n", ret); in pmic_glink_altmode_safe()
221 struct pmic_glink_altmode *altmode = alt_port->altmode; in pmic_glink_altmode_worker() local
226 pmic_glink_altmode_safe(altmode, alt_port); in pmic_glink_altmode_worker()
228 pmic_glink_altmode_enable_dp(altmode, alt_port, alt_port->mode, in pmic_glink_altmode_worker()
231 pmic_glink_altmode_enable_usb(altmode, alt_port); in pmic_glink_altmode_worker()
238 pmic_glink_altmode_request(altmode, ALTMODE_PAN_ACK, alt_port->index); in pmic_glink_altmode_worker()
258 static void pmic_glink_altmode_sc8180xp_notify(struct pmic_glink_altmode *altmode, in pmic_glink_altmode_sc8180xp_notify() argument
273 dev_warn(altmode->dev, "invalid length of USBC_NOTIFY indication: %zd\n", len); in pmic_glink_altmode_sc8180xp_notify()
288 if (port >= ARRAY_SIZE(altmode->ports) || !altmode->ports[port].altmode) { in pmic_glink_altmode_sc8180xp_notify()
289 dev_dbg(altmode->dev, "notification on undefined port %d\n", port); in pmic_glink_altmode_sc8180xp_notify()
293 alt_port = &altmode->ports[port]; in pmic_glink_altmode_sc8180xp_notify()
306 static void pmic_glink_altmode_sc8280xp_notify(struct pmic_glink_altmode *altmode, in pmic_glink_altmode_sc8280xp_notify() argument
318 dev_warn(altmode->dev, "invalid length USBC_NOTIFY_IND: %zd\n", in pmic_glink_altmode_sc8280xp_notify()
331 if (port >= ARRAY_SIZE(altmode->ports) || !altmode->ports[port].altmode) { in pmic_glink_altmode_sc8280xp_notify()
332 dev_dbg(altmode->dev, "notification on undefined port %d\n", port); in pmic_glink_altmode_sc8280xp_notify()
336 alt_port = &altmode->ports[port]; in pmic_glink_altmode_sc8280xp_notify()
347 struct pmic_glink_altmode *altmode = priv; in pmic_glink_altmode_callback() local
357 complete(&altmode->pan_ack); in pmic_glink_altmode_callback()
360 pmic_glink_altmode_sc8280xp_notify(altmode, svid, data, len); in pmic_glink_altmode_callback()
363 pmic_glink_altmode_sc8180xp_notify(altmode, data, len); in pmic_glink_altmode_callback()
385 struct pmic_glink_altmode *altmode = work_to_altmode(work); in pmic_glink_altmode_enable_worker() local
388 ret = pmic_glink_altmode_request(altmode, ALTMODE_PAN_EN, 0); in pmic_glink_altmode_enable_worker()
390 dev_err(altmode->dev, "failed to request altmode notifications: %d\n", ret); in pmic_glink_altmode_enable_worker()
395 struct pmic_glink_altmode *altmode = priv; in pmic_glink_altmode_pdr_notify() local
398 schedule_work(&altmode->enable_work); in pmic_glink_altmode_pdr_notify()
410 struct pmic_glink_altmode *altmode; in pmic_glink_altmode_probe() local
417 altmode = devm_kzalloc(dev, sizeof(*altmode), GFP_KERNEL); in pmic_glink_altmode_probe()
418 if (!altmode) in pmic_glink_altmode_probe()
421 altmode->dev = dev; in pmic_glink_altmode_probe()
425 altmode->owner_id = (unsigned long)match->data; in pmic_glink_altmode_probe()
427 altmode->owner_id = PMIC_GLINK_OWNER_USBC_PAN; in pmic_glink_altmode_probe()
429 INIT_WORK(&altmode->enable_work, pmic_glink_altmode_enable_worker); in pmic_glink_altmode_probe()
430 init_completion(&altmode->pan_ack); in pmic_glink_altmode_probe()
431 mutex_init(&altmode->lock); in pmic_glink_altmode_probe()
441 if (port >= ARRAY_SIZE(altmode->ports)) { in pmic_glink_altmode_probe()
446 if (altmode->ports[port].altmode) { in pmic_glink_altmode_probe()
452 alt_port = &altmode->ports[port]; in pmic_glink_altmode_probe()
453 alt_port->altmode = altmode; in pmic_glink_altmode_probe()
513 for (port = 0; port < ARRAY_SIZE(altmode->ports); port++) { in pmic_glink_altmode_probe()
514 alt_port = &altmode->ports[port]; in pmic_glink_altmode_probe()
523 altmode->client = devm_pmic_glink_client_alloc(dev, in pmic_glink_altmode_probe()
524 altmode->owner_id, in pmic_glink_altmode_probe()
527 altmode); in pmic_glink_altmode_probe()
528 if (IS_ERR(altmode->client)) in pmic_glink_altmode_probe()
529 return PTR_ERR(altmode->client); in pmic_glink_altmode_probe()
531 pmic_glink_client_register(altmode->client); in pmic_glink_altmode_probe()
537 { .name = "pmic_glink.altmode", },
550 MODULE_DESCRIPTION("Qualcomm PMIC GLINK Altmode driver");