mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 22:40:54 -04:00
Merge "dsp: Add restart interface for adsp"
This commit is contained in:
commit
9d536a42c5
1 changed files with 49 additions and 0 deletions
|
|
@ -26,12 +26,17 @@
|
|||
|
||||
#define Q6_PIL_GET_DELAY_MS 100
|
||||
#define BOOT_CMD 1
|
||||
#define SSR_RESET_CMD 1
|
||||
#define IMAGE_UNLOAD_CMD 0
|
||||
|
||||
static ssize_t adsp_boot_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
|
||||
static ssize_t adsp_ssr_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
|
||||
struct adsp_loader_private {
|
||||
void *pil_h;
|
||||
struct kobject *boot_adsp_obj;
|
||||
|
|
@ -41,8 +46,12 @@ struct adsp_loader_private {
|
|||
static struct kobj_attribute adsp_boot_attribute =
|
||||
__ATTR(boot, 0220, NULL, adsp_boot_store);
|
||||
|
||||
static struct kobj_attribute adsp_ssr_attribute =
|
||||
__ATTR(ssr, 0220, NULL, adsp_ssr_store);
|
||||
|
||||
static struct attribute *attrs[] = {
|
||||
&adsp_boot_attribute.attr,
|
||||
&adsp_ssr_attribute.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
|
@ -151,6 +160,46 @@ static void adsp_loader_do(struct platform_device *pdev)
|
|||
schedule_work(&adsp_ldr_work);
|
||||
}
|
||||
|
||||
static ssize_t adsp_ssr_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr,
|
||||
const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
int ssr_command = 0;
|
||||
struct subsys_device *adsp_dev = NULL;
|
||||
struct platform_device *pdev = adsp_private;
|
||||
struct adsp_loader_private *priv = NULL;
|
||||
int rc;
|
||||
|
||||
dev_dbg(&pdev->dev, "%s: going to call adsp ssr\n ", __func__);
|
||||
|
||||
if (kstrtoint(buf, 10, &ssr_command) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (ssr_command != SSR_RESET_CMD)
|
||||
return -EINVAL;
|
||||
|
||||
priv = platform_get_drvdata(pdev);
|
||||
if (!priv)
|
||||
return -EINVAL;
|
||||
|
||||
adsp_dev = (struct subsys_device *)priv->pil_h;
|
||||
if (!adsp_dev)
|
||||
return -EINVAL;
|
||||
|
||||
dev_err(&pdev->dev, "requesting for ADSP restart\n");
|
||||
|
||||
/* subsystem_restart_dev has worker queue to handle */
|
||||
rc = subsystem_restart_dev(adsp_dev);
|
||||
if (rc) {
|
||||
dev_err(&pdev->dev, "subsystem_restart_dev failed\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
dev_dbg(&pdev->dev, "ADSP restarted\n");
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t adsp_boot_store(struct kobject *kobj,
|
||||
struct kobj_attribute *attr,
|
||||
const char *buf,
|
||||
|
|
|
|||
Loading…
Reference in a new issue