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