qseecom: Add new dfab clock definition to the driver.

Currently, the qseecom driver uses the dfab clock definition
of scm driver. The new definition fixes this problem.
The driver should for NULL before setting the clock rate.

Change-Id: Iad653ee855b834a475b43502d36e4673c4bd03a3
Signed-off-by: Ramesh Masavarapu <rameshm@codeaurora.org>
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index a8f9f35..495a986 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -1137,6 +1137,10 @@
 	if (!qsee_perf_client)
 		return -EINVAL;
 
+	/* Check if the clk is valid */
+	if (IS_ERR_OR_NULL(qseecom_bus_clk))
+		return -EINVAL;
+
 	mutex_lock(&qsee_bw_mutex);
 	if (!qsee_bw_count) {
 		ret = msm_bus_scale_client_update_request(
@@ -1160,8 +1164,13 @@
 
 static void qsee_disable_clock_vote(void)
 {
+
 	if (!qsee_perf_client)
-		return ;
+		return;
+
+	/* Check if the clk is valid */
+	if (IS_ERR_OR_NULL(qseecom_bus_clk))
+		return;
 
 	mutex_lock(&qsee_bw_mutex);
 	if (qsee_bw_count > 0) {
@@ -1341,6 +1350,8 @@
 		}
 	}
 	kfree(data);
+	qsee_disable_clock_vote();
+
 	return ret;
 }
 
@@ -1384,7 +1395,6 @@
 static int __init qseecom_init(void)
 {
 	int rc;
-	int ret = 0;
 	struct device *class_dev;
 	char qsee_not_legacy = 0;
 	uint32_t system_call_id = QSEOS_CHECK_VERSION_CMD;
@@ -1448,22 +1458,21 @@
 	}
 
 	/* register client for bus scaling */
-	qsee_perf_client = msm_bus_scale_register_client(&qsee_bus_pdata);
-	if (!qsee_perf_client)
+	qsee_perf_client = msm_bus_scale_register_client(
+					&qsee_bus_pdata);
+	if (!qsee_perf_client) {
 		pr_err("Unable to register bus client\n");
 
-	qseecom_bus_clk = clk_get_sys("scm", "bus_clk");
-	if (!IS_ERR(qseecom_bus_clk)) {
-		ret = clk_set_rate(qseecom_bus_clk, 64000000);
-		if (ret) {
+		qseecom_bus_clk = clk_get(class_dev, "qseecom");
+		if (IS_ERR(qseecom_bus_clk)) {
 			qseecom_bus_clk = NULL;
-			pr_err("Unable to set clock rate\n");
+		} else if (qseecom_bus_clk != NULL) {
+			pr_debug("Enabled DFAB clock");
+			clk_set_rate(qseecom_bus_clk, 64000000);
 		}
-	} else {
-		qseecom_bus_clk = NULL;
-		pr_warn("Unable to get bus clk\n");
 	}
 	return 0;
+
 err:
 	device_destroy(driver_class, qseecom_device_no);
 class_destroy:
@@ -1475,6 +1484,8 @@
 
 static void __exit qseecom_exit(void)
 {
+	clk_put(qseecom_bus_clk);
+
 	device_destroy(driver_class, qseecom_device_no);
 	class_destroy(driver_class);
 	unregister_chrdev_region(qseecom_device_no, 1);