> /** > + * ufshcd_dme_power_xxx - UIC command for DME_POWERON, DME_POWEROFF > + * @hba: per adapter instance > + * @on: indicate wherter power_on or power_off > + * > + * Returns 0 on success, non-zero value on failure > + */ > +int ufshcd_dme_power_xxx(struct ufs_hba *hba, u8 on) > +{ > + struct uic_command uic_cmd = {0}; > + static const char *const action[] = { > + "dme-power-off", > + "dme-power-on" > + }; > + const char *power = action[!!on]; > + int ret; > + > + uic_cmd.command = on ? > + UIC_CMD_DME_POWERON : UIC_CMD_DME_POWEROFF; > + > + ret = ufshcd_send_uic_cmd(hba, &uic_cmd); > + if (ret) > + dev_err(hba->dev, "%s: error code %d\n", power, ret); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(ufshcd_dme_power_xxx); > + > +/** > + * ufshcd_dme_hibern8_xxx - UIC command for DME_HIBERNATE_ENTER, > + * DME_HIBERNATE_EXIT > + * @hba: per adapter instance > + * @enter: indicate wherter hibernation enter or exit > + * > + * Returns 0 on success, non-zero value on failure > + */ > +int ufshcd_dme_hibern8_xxx(struct ufs_hba *hba, u8 enter) > +{ > + struct uic_command uic_cmd = {0}; > + static const char *const action[] = { > + "dme-hibernate-exit", > + "dme-hibernate-enter" > + }; > + const char *hibern8 = action[!!enter]; > + u8 status; > + int ret; > + > + uic_cmd.command = enter ? > + UIC_CMD_DME_HIBER_ENTER : UIC_CMD_DME_HIBER_EXIT; > + > + mutex_lock(&hba->uic_cmd_mutex); > + init_completion(&hba->hibern8_done); > + ret = __ufshcd_send_uic_cmd(hba, &uic_cmd); > + if (ret) { > + dev_err(hba->dev, "%s: error code %d\n", hibern8, ret); > + goto out; > + } > + > + if (wait_for_completion_timeout(&hba->hibern8_done, > + msecs_to_jiffies(UIC_CMD_TIMEOUT))) { > + status = ufshcd_get_upmcrs(hba); > + if (status != PWR_LOCAL) { > + dev_err(hba->dev, "%s: failed, host upmcrs:%x\n", > + hibern8, status); > + ret = status; > + } > + } else { > + dev_err(hba->dev, "%s: timeout\n", hibern8); > + ret = -ETIMEDOUT; > + } > +out: > + mutex_unlock(&hba->uic_cmd_mutex); > + return ret; > +} > +EXPORT_SYMBOL_GPL(ufshcd_dme_hibern8_xxx); > + power/hibernate functions can also be renamed as ufshcd_dme_power/hibernate_config(struct ufs_hba *hba, bool enable/enter) or similar instead of xxx. -- ~Santosh -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html