From 10ebd8556b7990499c896a550e3d416b444211e6 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 02:23:07 +0000
Subject: [PATCH] add led

---
 kernel/drivers/mmc/host/rk_sdmmc_ops.c |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/kernel/drivers/mmc/host/rk_sdmmc_ops.c b/kernel/drivers/mmc/host/rk_sdmmc_ops.c
index f07745d..d0ef613 100644
--- a/kernel/drivers/mmc/host/rk_sdmmc_ops.c
+++ b/kernel/drivers/mmc/host/rk_sdmmc_ops.c
@@ -22,11 +22,13 @@
 #include <linux/seq_file.h>
 #include <linux/mutex.h>
 #include <linux/miscdevice.h>
-#include <linux/module.h>
+#include <linux/pm.h>
+#include <linux/pm_runtime.h>
 #include "../core/block.h"
 #include "../core/card.h"
 #include "../core/core.h"
 #include "../core/mmc_ops.h"
+#include "rk_sdmmc_ops.h"
 
 #define BLKSZ		512
 
@@ -131,7 +133,7 @@
 /*
  * Transfer a single sector of kernel addressable data
  */
-int rk_emmc_transfer(u8 *buffer, unsigned addr, unsigned blksz, int write)
+int rk_emmc_transfer(u8 *buffer, unsigned int addr, unsigned int datasz, int write)
 {
 	int ret = 0;
 	enum emmc_area_type areatype;
@@ -150,11 +152,18 @@
 	mrq.data = &data;
 	mrq.stop = &stop;
 
-	sg_init_one(&sg, buffer, blksz);
+	sg_init_one(&sg, buffer, datasz);
 
-	rk_emmc_prepare_mrq(&mrq, &sg, 1, addr, 1, blksz, write);
+	rk_emmc_prepare_mrq(&mrq, &sg, 1, addr, datasz / BLKSZ, BLKSZ, write);
 
+	pm_runtime_get_sync(&this_card->dev);
 	mmc_claim_host(this_card->host);
+
+	if (this_card->ext_csd.cmdq_en) {
+		ret = mmc_cmdq_disable(this_card);
+		if (ret)
+			goto exit;
+	}
 
 	areatype = (enum emmc_area_type)this_card->ext_csd.part_config
 		    & EXT_CSD_PART_CONFIG_ACC_MASK;
@@ -186,7 +195,12 @@
 	}
 
 exit:
+	if (this_card->reenable_cmdq && !this_card->ext_csd.cmdq_en)
+		mmc_cmdq_enable(this_card);
+
 	mmc_release_host(this_card->host);
+	pm_runtime_put(&this_card->dev);
+
 	return ret;
 }
 EXPORT_SYMBOL(rk_emmc_transfer);

--
Gitblit v1.6.2