soc/tegra: pmc: Document core domain fields
[linux-2.6-microblaze.git] / drivers / rpmsg / qcom_smd.c
index 540e027..764c980 100644 (file)
@@ -1113,7 +1113,7 @@ static int qcom_smd_create_chrdev(struct qcom_smd_edge *edge)
        qsdev->rpdev.dev.parent = &edge->dev;
        qsdev->rpdev.dev.release = qcom_smd_release_device;
 
-       return rpmsg_chrdev_register_device(&qsdev->rpdev);
+       return rpmsg_ctrldev_register_device(&qsdev->rpdev);
 }
 
 /*
@@ -1288,9 +1288,14 @@ static void qcom_channel_state_worker(struct work_struct *work)
                if (channel->state != SMD_CHANNEL_CLOSED)
                        continue;
 
+               /*
+                * Always open rpm_requests, even when already opened which is
+                * required on some SoCs like msm8953.
+                */
                remote_state = GET_RX_CHANNEL_INFO(channel, state);
                if (remote_state != SMD_CHANNEL_OPENING &&
-                   remote_state != SMD_CHANNEL_OPENED)
+                   remote_state != SMD_CHANNEL_OPENED &&
+                   strcmp(channel->name, "rpm_requests"))
                        continue;
 
                if (channel->registered)
@@ -1298,9 +1303,7 @@ static void qcom_channel_state_worker(struct work_struct *work)
 
                spin_unlock_irqrestore(&edge->channels_lock, flags);
                qcom_smd_create_device(channel);
-               channel->registered = true;
                spin_lock_irqsave(&edge->channels_lock, flags);
-
                channel->registered = true;
        }
 
@@ -1605,7 +1608,7 @@ static int __init qcom_smd_init(void)
 {
        return platform_driver_register(&qcom_smd_driver);
 }
-subsys_initcall(qcom_smd_init);
+arch_initcall(qcom_smd_init);
 
 static void __exit qcom_smd_exit(void)
 {