Lines Matching +full:needs +full:- +full:reset +full:- +full:on +full:- +full:resume

1 // SPDX-License-Identifier: GPL-2.0
85 if (be16_to_cpu(desc->feature_code) != 3) { in zpodd_get_mech_type()
90 if (desc->mech_type == 0 && desc->load == 0 && desc->eject == 1) { in zpodd_get_mech_type()
93 } else if (desc->mech_type == 1 && desc->load == 0 && in zpodd_get_mech_type()
94 desc->eject == 1) { in zpodd_get_mech_type()
108 struct zpodd *zpodd = dev->zpodd; in zpready()
115 sense_buf = dev->sector_buf; in zpready()
132 if (zpodd->mech_type == ODD_MECH_TYPE_SLOT) in zpready()
141 * Update the zpodd->zp_ready field. This field will only be set
144 * is set, it will be cleared during resume from powered off state.
148 struct zpodd *zpodd = dev->zpodd; in zpodd_on_suspend()
152 zpodd->zp_sampled = false; in zpodd_on_suspend()
153 zpodd->zp_ready = false; in zpodd_on_suspend()
157 if (!zpodd->zp_sampled) { in zpodd_on_suspend()
158 zpodd->zp_sampled = true; in zpodd_on_suspend()
159 zpodd->last_ready = jiffies; in zpodd_on_suspend()
163 expires = zpodd->last_ready + secs_to_jiffies(zpodd_poweroff_delay); in zpodd_on_suspend()
167 zpodd->zp_ready = true; in zpodd_on_suspend()
172 struct zpodd *zpodd = dev->zpodd; in zpodd_zpready()
173 return zpodd->zp_ready; in zpodd_zpready()
178 * this flag will be used during resume to decide what operations are needed
181 * Also, media poll needs to be silenced, so that it doesn't bring the ODD
186 struct zpodd *zpodd = dev->zpodd; in zpodd_enable_run_wake()
188 sdev_disable_disk_events(dev->sdev); in zpodd_enable_run_wake()
190 zpodd->powered_off = true; in zpodd_enable_run_wake()
191 acpi_pm_set_device_wakeup(&dev->tdev, true); in zpodd_enable_run_wake()
197 struct zpodd *zpodd = dev->zpodd; in zpodd_disable_run_wake()
199 if (zpodd->powered_off) in zpodd_disable_run_wake()
200 acpi_pm_set_device_wakeup(&dev->tdev, false); in zpodd_disable_run_wake()
204 * Post power on processing after the ODD has been recovered. If the
207 * For drawer type ODD, if it is powered on due to user pressed the
208 * eject button, the tray needs to be ejected. This can only be done
210 * device is able to process NON_DATA PIO command, as eject needs to
214 * zpodd_wake_dev represents if power on is due to user's action.
216 * For both types of ODD, several fields need to be reset.
220 struct zpodd *zpodd = dev->zpodd; in zpodd_post_poweron()
222 if (!zpodd->powered_off) in zpodd_post_poweron()
225 zpodd->powered_off = false; in zpodd_post_poweron()
227 if (zpodd->from_notify) { in zpodd_post_poweron()
228 zpodd->from_notify = false; in zpodd_post_poweron()
229 if (zpodd->mech_type == ODD_MECH_TYPE_DRAWER) in zpodd_post_poweron()
233 zpodd->zp_sampled = false; in zpodd_post_poweron()
234 zpodd->zp_ready = false; in zpodd_post_poweron()
236 sdev_enable_disk_events(dev->sdev); in zpodd_post_poweron()
242 struct zpodd *zpodd = ata_dev->zpodd; in zpodd_wake_dev()
243 struct device *dev = &ata_dev->sdev->sdev_gendev; in zpodd_wake_dev()
246 zpodd->from_notify = true; in zpodd_wake_dev()
266 struct acpi_device *adev = ACPI_COMPANION(&dev->tdev); in zpodd_init()
270 if (dev->zpodd || !adev || !acpi_device_can_poweroff(adev)) in zpodd_init()
281 zpodd->mech_type = mech_type; in zpodd_init()
284 zpodd->dev = dev; in zpodd_init()
285 dev->zpodd = zpodd; in zpodd_init()
286 dev_pm_qos_expose_flags(&dev->tdev, 0); in zpodd_init()
292 kfree(dev->zpodd); in zpodd_exit()
293 dev->zpodd = NULL; in zpodd_exit()