arche_pdata 73 drivers/staging/greybus/arche-platform.c static void arche_platform_set_state(struct arche_platform_drvdata *arche_pdata, arche_pdata 76 drivers/staging/greybus/arche-platform.c arche_pdata->state = state; arche_pdata 81 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata, arche_pdata 84 drivers/staging/greybus/arche-platform.c arche_pdata->wake_detect_state = state; arche_pdata 115 drivers/staging/greybus/arche-platform.c static void arche_platform_wd_irq_en(struct arche_platform_drvdata *arche_pdata) arche_pdata 118 drivers/staging/greybus/arche-platform.c enable_irq(arche_pdata->wake_detect_irq); arche_pdata 123 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = devid; arche_pdata 126 drivers/staging/greybus/arche-platform.c spin_lock_irqsave(&arche_pdata->wake_lock, flags); arche_pdata 127 drivers/staging/greybus/arche-platform.c if (arche_pdata->wake_detect_state != WD_STATE_COLDBOOT_TRIG) { arche_pdata 129 drivers/staging/greybus/arche-platform.c spin_unlock_irqrestore(&arche_pdata->wake_lock, flags); arche_pdata 133 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, arche_pdata 135 drivers/staging/greybus/arche-platform.c spin_unlock_irqrestore(&arche_pdata->wake_lock, flags); arche_pdata 138 drivers/staging/greybus/arche-platform.c device_for_each_child(arche_pdata->dev, NULL, apb_poweroff); arche_pdata 141 drivers/staging/greybus/arche-platform.c device_for_each_child(arche_pdata->dev, NULL, apb_cold_boot); arche_pdata 145 drivers/staging/greybus/arche-platform.c dev_warn(arche_pdata->dev, "failed to control hub device\n"); arche_pdata 147 drivers/staging/greybus/arche-platform.c spin_lock_irqsave(&arche_pdata->wake_lock, flags); arche_pdata 148 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, WD_STATE_IDLE); arche_pdata 149 drivers/staging/greybus/arche-platform.c spin_unlock_irqrestore(&arche_pdata->wake_lock, flags); arche_pdata 156 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = devid; arche_pdata 159 drivers/staging/greybus/arche-platform.c spin_lock_irqsave(&arche_pdata->wake_lock, flags); arche_pdata 161 drivers/staging/greybus/arche-platform.c if (gpiod_get_value(arche_pdata->wake_detect)) { arche_pdata 169 drivers/staging/greybus/arche-platform.c if (arche_pdata->wake_detect_state == WD_STATE_BOOT_INIT) { arche_pdata 171 drivers/staging/greybus/arche-platform.c arche_pdata->wake_detect_start + arche_pdata 173 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, arche_pdata 180 drivers/staging/greybus/arche-platform.c if (arche_pdata->wake_detect_state != arche_pdata 182 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, arche_pdata 185 drivers/staging/greybus/arche-platform.c &arche_pdata->wake_lock, arche_pdata 193 drivers/staging/greybus/arche-platform.c if (arche_pdata->wake_detect_state == WD_STATE_IDLE) { arche_pdata 194 drivers/staging/greybus/arche-platform.c arche_pdata->wake_detect_start = jiffies; arche_pdata 202 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, arche_pdata 207 drivers/staging/greybus/arche-platform.c spin_unlock_irqrestore(&arche_pdata->wake_lock, flags); arche_pdata 216 drivers/staging/greybus/arche-platform.c arche_platform_coldboot_seq(struct arche_platform_drvdata *arche_pdata) arche_pdata 220 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_ACTIVE) arche_pdata 223 drivers/staging/greybus/arche-platform.c dev_info(arche_pdata->dev, "Booting from cold boot state\n"); arche_pdata 225 drivers/staging/greybus/arche-platform.c svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi); arche_pdata 227 drivers/staging/greybus/arche-platform.c gpiod_set_value(arche_pdata->svc_sysboot, 0); arche_pdata 230 drivers/staging/greybus/arche-platform.c ret = clk_prepare_enable(arche_pdata->svc_ref_clk); arche_pdata 232 drivers/staging/greybus/arche-platform.c dev_err(arche_pdata->dev, "failed to enable svc_ref_clk: %d\n", arche_pdata 238 drivers/staging/greybus/arche-platform.c svc_reset_onoff(arche_pdata->svc_reset, !arche_pdata->is_reset_act_hi); arche_pdata 240 drivers/staging/greybus/arche-platform.c arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_ACTIVE); arche_pdata 249 drivers/staging/greybus/arche-platform.c arche_platform_fw_flashing_seq(struct arche_platform_drvdata *arche_pdata) arche_pdata 253 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_FW_FLASHING) arche_pdata 256 drivers/staging/greybus/arche-platform.c dev_info(arche_pdata->dev, "Switching to FW flashing state\n"); arche_pdata 258 drivers/staging/greybus/arche-platform.c svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi); arche_pdata 260 drivers/staging/greybus/arche-platform.c gpiod_set_value(arche_pdata->svc_sysboot, 1); arche_pdata 264 drivers/staging/greybus/arche-platform.c ret = clk_prepare_enable(arche_pdata->svc_ref_clk); arche_pdata 266 drivers/staging/greybus/arche-platform.c dev_err(arche_pdata->dev, "failed to enable svc_ref_clk: %d\n", arche_pdata 271 drivers/staging/greybus/arche-platform.c svc_reset_onoff(arche_pdata->svc_reset, !arche_pdata->is_reset_act_hi); arche_pdata 273 drivers/staging/greybus/arche-platform.c arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_FW_FLASHING); arche_pdata 282 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(struct arche_platform_drvdata *arche_pdata) arche_pdata 286 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_OFF) arche_pdata 290 drivers/staging/greybus/arche-platform.c if (arche_pdata->state != ARCHE_PLATFORM_STATE_FW_FLASHING) { arche_pdata 291 drivers/staging/greybus/arche-platform.c disable_irq(arche_pdata->wake_detect_irq); arche_pdata 293 drivers/staging/greybus/arche-platform.c spin_lock_irqsave(&arche_pdata->wake_lock, flags); arche_pdata 294 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, arche_pdata 296 drivers/staging/greybus/arche-platform.c spin_unlock_irqrestore(&arche_pdata->wake_lock, flags); arche_pdata 299 drivers/staging/greybus/arche-platform.c clk_disable_unprepare(arche_pdata->svc_ref_clk); arche_pdata 302 drivers/staging/greybus/arche-platform.c svc_reset_onoff(arche_pdata->svc_reset, arche_pdata->is_reset_act_hi); arche_pdata 304 drivers/staging/greybus/arche-platform.c arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_OFF); arche_pdata 311 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = dev_get_drvdata(dev); arche_pdata 314 drivers/staging/greybus/arche-platform.c mutex_lock(&arche_pdata->platform_state_mutex); arche_pdata 317 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_OFF) arche_pdata 321 drivers/staging/greybus/arche-platform.c device_for_each_child(arche_pdata->dev, NULL, apb_poweroff); arche_pdata 323 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(arche_pdata); arche_pdata 326 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_ACTIVE) arche_pdata 332 drivers/staging/greybus/arche-platform.c device_for_each_child(arche_pdata->dev, NULL, apb_poweroff); arche_pdata 333 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(arche_pdata); arche_pdata 335 drivers/staging/greybus/arche-platform.c arche_platform_wd_irq_en(arche_pdata); arche_pdata 336 drivers/staging/greybus/arche-platform.c ret = arche_platform_coldboot_seq(arche_pdata); arche_pdata 341 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_STANDBY) arche_pdata 344 drivers/staging/greybus/arche-platform.c dev_warn(arche_pdata->dev, "standby state not supported\n"); arche_pdata 346 drivers/staging/greybus/arche-platform.c if (arche_pdata->state == ARCHE_PLATFORM_STATE_FW_FLASHING) arche_pdata 356 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(arche_pdata); arche_pdata 358 drivers/staging/greybus/arche-platform.c ret = arche_platform_fw_flashing_seq(arche_pdata); arche_pdata 362 drivers/staging/greybus/arche-platform.c dev_err(arche_pdata->dev, "unknown state\n"); arche_pdata 367 drivers/staging/greybus/arche-platform.c mutex_unlock(&arche_pdata->platform_state_mutex); arche_pdata 374 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = dev_get_drvdata(dev); arche_pdata 376 drivers/staging/greybus/arche-platform.c switch (arche_pdata->state) { arche_pdata 395 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = arche_pdata 400 drivers/staging/greybus/arche-platform.c mutex_lock(&arche_pdata->platform_state_mutex); arche_pdata 403 drivers/staging/greybus/arche-platform.c if (arche_pdata->state != ARCHE_PLATFORM_STATE_ACTIVE) { arche_pdata 407 drivers/staging/greybus/arche-platform.c device_for_each_child(arche_pdata->dev, NULL, apb_poweroff); arche_pdata 408 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(arche_pdata); arche_pdata 411 drivers/staging/greybus/arche-platform.c if (arche_pdata->state != ARCHE_PLATFORM_STATE_OFF) arche_pdata 414 drivers/staging/greybus/arche-platform.c arche_platform_wd_irq_en(arche_pdata); arche_pdata 415 drivers/staging/greybus/arche-platform.c arche_platform_coldboot_seq(arche_pdata); arche_pdata 420 drivers/staging/greybus/arche-platform.c mutex_unlock(&arche_pdata->platform_state_mutex); arche_pdata 427 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata; arche_pdata 433 drivers/staging/greybus/arche-platform.c arche_pdata = devm_kzalloc(&pdev->dev, sizeof(*arche_pdata), arche_pdata 435 drivers/staging/greybus/arche-platform.c if (!arche_pdata) arche_pdata 439 drivers/staging/greybus/arche-platform.c arche_pdata->is_reset_act_hi = of_property_read_bool(np, arche_pdata 441 drivers/staging/greybus/arche-platform.c if (arche_pdata->is_reset_act_hi) arche_pdata 446 drivers/staging/greybus/arche-platform.c arche_pdata->svc_reset = devm_gpiod_get(dev, "svc,reset", flags); arche_pdata 447 drivers/staging/greybus/arche-platform.c if (IS_ERR(arche_pdata->svc_reset)) { arche_pdata 448 drivers/staging/greybus/arche-platform.c ret = PTR_ERR(arche_pdata->svc_reset); arche_pdata 452 drivers/staging/greybus/arche-platform.c arche_platform_set_state(arche_pdata, ARCHE_PLATFORM_STATE_OFF); arche_pdata 454 drivers/staging/greybus/arche-platform.c arche_pdata->svc_sysboot = devm_gpiod_get(dev, "svc,sysboot", arche_pdata 456 drivers/staging/greybus/arche-platform.c if (IS_ERR(arche_pdata->svc_sysboot)) { arche_pdata 457 drivers/staging/greybus/arche-platform.c ret = PTR_ERR(arche_pdata->svc_sysboot); arche_pdata 463 drivers/staging/greybus/arche-platform.c arche_pdata->svc_refclk_req = devm_gpiod_get(dev, "svc,refclk-req", arche_pdata 465 drivers/staging/greybus/arche-platform.c if (IS_ERR(arche_pdata->svc_refclk_req)) { arche_pdata 466 drivers/staging/greybus/arche-platform.c ret = PTR_ERR(arche_pdata->svc_refclk_req); arche_pdata 472 drivers/staging/greybus/arche-platform.c arche_pdata->svc_ref_clk = devm_clk_get(dev, "svc_ref_clk"); arche_pdata 473 drivers/staging/greybus/arche-platform.c if (IS_ERR(arche_pdata->svc_ref_clk)) { arche_pdata 474 drivers/staging/greybus/arche-platform.c ret = PTR_ERR(arche_pdata->svc_ref_clk); arche_pdata 479 drivers/staging/greybus/arche-platform.c platform_set_drvdata(pdev, arche_pdata); arche_pdata 481 drivers/staging/greybus/arche-platform.c arche_pdata->num_apbs = of_get_child_count(np); arche_pdata 482 drivers/staging/greybus/arche-platform.c dev_dbg(dev, "Number of APB's available - %d\n", arche_pdata->num_apbs); arche_pdata 484 drivers/staging/greybus/arche-platform.c arche_pdata->wake_detect = devm_gpiod_get(dev, "svc,wake-detect", arche_pdata 486 drivers/staging/greybus/arche-platform.c if (IS_ERR(arche_pdata->wake_detect)) { arche_pdata 487 drivers/staging/greybus/arche-platform.c ret = PTR_ERR(arche_pdata->wake_detect); arche_pdata 492 drivers/staging/greybus/arche-platform.c arche_platform_set_wake_detect_state(arche_pdata, WD_STATE_IDLE); arche_pdata 494 drivers/staging/greybus/arche-platform.c arche_pdata->dev = &pdev->dev; arche_pdata 496 drivers/staging/greybus/arche-platform.c spin_lock_init(&arche_pdata->wake_lock); arche_pdata 497 drivers/staging/greybus/arche-platform.c mutex_init(&arche_pdata->platform_state_mutex); arche_pdata 498 drivers/staging/greybus/arche-platform.c arche_pdata->wake_detect_irq = arche_pdata 499 drivers/staging/greybus/arche-platform.c gpiod_to_irq(arche_pdata->wake_detect); arche_pdata 501 drivers/staging/greybus/arche-platform.c ret = devm_request_threaded_irq(dev, arche_pdata->wake_detect_irq, arche_pdata 506 drivers/staging/greybus/arche-platform.c dev_name(dev), arche_pdata); arche_pdata 511 drivers/staging/greybus/arche-platform.c disable_irq(arche_pdata->wake_detect_irq); arche_pdata 525 drivers/staging/greybus/arche-platform.c arche_pdata->pm_notifier.notifier_call = arche_platform_pm_notifier; arche_pdata 526 drivers/staging/greybus/arche-platform.c ret = register_pm_notifier(&arche_pdata->pm_notifier); arche_pdata 535 drivers/staging/greybus/arche-platform.c mutex_lock(&arche_pdata->platform_state_mutex); arche_pdata 536 drivers/staging/greybus/arche-platform.c ret = arche_platform_coldboot_seq(arche_pdata); arche_pdata 541 drivers/staging/greybus/arche-platform.c arche_platform_wd_irq_en(arche_pdata); arche_pdata 542 drivers/staging/greybus/arche-platform.c mutex_unlock(&arche_pdata->platform_state_mutex); arche_pdata 549 drivers/staging/greybus/arche-platform.c mutex_unlock(&arche_pdata->platform_state_mutex); arche_pdata 566 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = platform_get_drvdata(pdev); arche_pdata 568 drivers/staging/greybus/arche-platform.c unregister_pm_notifier(&arche_pdata->pm_notifier); arche_pdata 571 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(arche_pdata); arche_pdata 574 drivers/staging/greybus/arche-platform.c dev_warn(arche_pdata->dev, "failed to control hub device\n"); arche_pdata 609 drivers/staging/greybus/arche-platform.c struct arche_platform_drvdata *arche_pdata = platform_get_drvdata(pdev); arche_pdata 611 drivers/staging/greybus/arche-platform.c arche_platform_poweroff_seq(arche_pdata);