Lines Matching refs:ddata

110 	struct phy_mdm6600 *ddata = phy_get_drvdata(x);
111 struct gpio_desc *enable_gpio = ddata->ctrl_gpios[PHY_MDM6600_ENABLE];
113 if (!ddata->enabled)
123 struct phy_mdm6600 *ddata = phy_get_drvdata(x);
124 struct gpio_desc *enable_gpio = ddata->ctrl_gpios[PHY_MDM6600_ENABLE];
126 if (!ddata->enabled)
140 struct phy_mdm6600 *ddata = phy_get_drvdata(x);
141 struct gpio_desc *enable_gpio = ddata->ctrl_gpios[PHY_MDM6600_ENABLE];
144 if (!ddata->enabled)
151 dev_warn(ddata->dev, "%s: phy_pm_runtime_get: %i\n",
169 * @ddata: device driver data
174 static void phy_mdm6600_cmd(struct phy_mdm6600 *ddata, int val)
181 ddata->cmd_gpios->desc,
182 ddata->cmd_gpios->info, values);
191 struct phy_mdm6600 *ddata;
196 ddata = container_of(work, struct phy_mdm6600, status_work.work);
197 dev = ddata->dev;
200 ddata->status_gpios->desc,
201 ddata->status_gpios->info,
206 ddata->status = values[0] & ((1 << PHY_MDM6600_NR_STATUS_LINES) - 1);
209 ddata->status,
210 phy_mdm6600_status_name[ddata->status]);
211 complete(&ddata->ack);
216 struct phy_mdm6600 *ddata = data;
218 schedule_delayed_work(&ddata->status_work, msecs_to_jiffies(10));
235 struct phy_mdm6600 *ddata = data;
239 mode_gpio1 = ddata->mode_gpios->desc[PHY_MDM6600_MODE1];
244 dev_dbg(ddata->dev, "OOB wake on mode_gpio1: %i\n", wakeup);
245 error = pm_runtime_get_sync(ddata->dev);
247 pm_runtime_put_noidle(ddata->dev);
253 pm_runtime_mark_last_busy(ddata->dev);
254 pm_runtime_put_autosuspend(ddata->dev);
261 * @ddata: device driver data
263 static void phy_mdm6600_init_irq(struct phy_mdm6600 *ddata)
265 struct device *dev = ddata->dev;
270 struct gpio_desc *gpio = ddata->status_gpios->desc[i];
282 ddata);
303 * @ddata: device driver data
305 static int phy_mdm6600_init_lines(struct phy_mdm6600 *ddata)
307 struct device *dev = ddata->dev;
314 struct gpio_desc **gpio = &ddata->ctrl_gpios[i];
325 ddata->mode_gpios = devm_gpiod_get_array(dev, "motorola,mode",
327 if (IS_ERR(ddata->mode_gpios))
328 return PTR_ERR(ddata->mode_gpios);
330 if (ddata->mode_gpios->ndescs != PHY_MDM6600_NR_MODE_LINES)
334 ddata->status_gpios = devm_gpiod_get_array(dev, "motorola,status",
336 if (IS_ERR(ddata->status_gpios))
337 return PTR_ERR(ddata->status_gpios);
339 if (ddata->status_gpios->ndescs != PHY_MDM6600_NR_STATUS_LINES)
343 ddata->cmd_gpios = devm_gpiod_get_array(dev, "motorola,cmd",
345 if (IS_ERR(ddata->cmd_gpios))
346 return PTR_ERR(ddata->cmd_gpios);
348 if (ddata->cmd_gpios->ndescs != PHY_MDM6600_NR_CMD_LINES)
356 * @ddata: device driver data
364 static int phy_mdm6600_device_power_on(struct phy_mdm6600 *ddata)
369 mode_gpio0 = ddata->mode_gpios->desc[PHY_MDM6600_MODE0];
370 mode_gpio1 = ddata->mode_gpios->desc[PHY_MDM6600_MODE1];
371 reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET];
372 power_gpio = ddata->ctrl_gpios[PHY_MDM6600_POWER];
384 phy_mdm6600_cmd(ddata, PHY_MDM6600_CMD_NO_BYPASS);
402 ddata->enabled = true;
405 dev_info(ddata->dev, "Waiting for power up request to complete..\n");
406 if (wait_for_completion_timeout(&ddata->ack,
408 if (ddata->status > PHY_MDM6600_STATUS_PANIC &&
409 ddata->status < PHY_MDM6600_STATUS_SHUTDOWN_ACK)
410 dev_info(ddata->dev, "Powered up OK\n");
412 ddata->enabled = false;
414 dev_err(ddata->dev, "Timed out powering up\n");
424 error = devm_request_threaded_irq(ddata->dev, wakeirq, NULL,
430 ddata);
432 dev_warn(ddata->dev, "no modem wakeirq irq%i: %i\n",
435 ddata->running = true;
442 * @ddata: device driver data
444 static void phy_mdm6600_device_power_off(struct phy_mdm6600 *ddata)
447 ddata->ctrl_gpios[PHY_MDM6600_RESET];
450 ddata->enabled = false;
451 phy_mdm6600_cmd(ddata, PHY_MDM6600_CMD_BP_SHUTDOWN_REQ);
456 dev_info(ddata->dev, "Waiting for power down request to complete.. ");
457 if (wait_for_completion_timeout(&ddata->ack,
459 if (ddata->status == PHY_MDM6600_STATUS_PANIC)
460 dev_info(ddata->dev, "Powered down OK\n");
462 dev_err(ddata->dev, "Timed out powering down\n");
471 error = pinctrl_pm_select_sleep_state(ddata->dev);
473 dev_warn(ddata->dev, "%s: error with sleep_state: %i\n",
479 struct phy_mdm6600 *ddata;
482 ddata = container_of(work, struct phy_mdm6600, bootup_work.work);
484 error = phy_mdm6600_device_power_on(ddata);
486 dev_err(ddata->dev, "Device not functional\n");
496 static void phy_mdm6600_wake_modem(struct phy_mdm6600 *ddata)
500 mode_gpio0 = ddata->mode_gpios->desc[PHY_MDM6600_MODE0];
504 if (ddata->awake)
512 struct phy_mdm6600 *ddata;
514 ddata = container_of(work, struct phy_mdm6600, modem_wake_work.work);
515 phy_mdm6600_wake_modem(ddata);
522 schedule_delayed_work(&ddata->modem_wake_work,
528 struct phy_mdm6600 *ddata = dev_get_drvdata(dev);
530 cancel_delayed_work_sync(&ddata->modem_wake_work);
531 ddata->awake = false;
538 struct phy_mdm6600 *ddata = dev_get_drvdata(dev);
540 phy_mdm6600_modem_wake(&ddata->modem_wake_work.work);
541 ddata->awake = true;
559 struct phy_mdm6600 *ddata;
562 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL);
563 if (!ddata)
566 INIT_DELAYED_WORK(&ddata->bootup_work,
568 INIT_DELAYED_WORK(&ddata->status_work, phy_mdm6600_status);
569 INIT_DELAYED_WORK(&ddata->modem_wake_work, phy_mdm6600_modem_wake);
570 init_completion(&ddata->ack);
572 ddata->dev = &pdev->dev;
573 platform_set_drvdata(pdev, ddata);
575 error = phy_mdm6600_init_lines(ddata);
579 phy_mdm6600_init_irq(ddata);
580 schedule_delayed_work(&ddata->bootup_work, 0);
595 pm_runtime_use_autosuspend(ddata->dev);
596 pm_runtime_set_autosuspend_delay(ddata->dev,
598 pm_runtime_enable(ddata->dev);
599 error = pm_runtime_get_sync(ddata->dev);
601 dev_warn(ddata->dev, "failed to wake modem: %i\n", error);
602 pm_runtime_put_noidle(ddata->dev);
606 ddata->generic_phy = devm_phy_create(ddata->dev, NULL, &gpio_usb_ops);
607 if (IS_ERR(ddata->generic_phy)) {
608 error = PTR_ERR(ddata->generic_phy);
612 phy_set_drvdata(ddata->generic_phy, ddata);
614 ddata->phy_provider =
615 devm_of_phy_provider_register(ddata->dev,
617 if (IS_ERR(ddata->phy_provider))
618 error = PTR_ERR(ddata->phy_provider);
621 pm_runtime_mark_last_busy(ddata->dev);
622 pm_runtime_put_autosuspend(ddata->dev);
626 phy_mdm6600_device_power_off(ddata);
627 pm_runtime_disable(ddata->dev);
628 pm_runtime_dont_use_autosuspend(ddata->dev);
636 struct phy_mdm6600 *ddata = platform_get_drvdata(pdev);
637 struct gpio_desc *reset_gpio = ddata->ctrl_gpios[PHY_MDM6600_RESET];
639 pm_runtime_get_noresume(ddata->dev);
640 pm_runtime_dont_use_autosuspend(ddata->dev);
641 pm_runtime_put_sync(ddata->dev);
642 pm_runtime_disable(ddata->dev);
644 if (!ddata->running)
645 wait_for_completion_timeout(&ddata->ack,
649 phy_mdm6600_device_power_off(ddata);
651 cancel_delayed_work_sync(&ddata->modem_wake_work);
652 cancel_delayed_work_sync(&ddata->bootup_work);
653 cancel_delayed_work_sync(&ddata->status_work);