]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
mmc: core: Add sysfs node for speed class of SD
authorR Raj Kumar <rrajk@nvidia.com>
Mon, 28 Jul 2014 10:16:53 +0000 (15:46 +0530)
committerPavan Kunapuli <pkunapuli@nvidia.com>
Wed, 6 May 2015 09:47:13 +0000 (02:47 -0700)
Added sysfs entry speed_class for SD card's
speed classs details.
cat /sys/kernel/debug/mmc1/mmc1:<card#>/speed_class
Result:
4 - Class 10
3 - Class 6
2 - Class 4
1 - Class 2
0 - Class 0

Signed-off-by: R Raj Kumar <rrajk@nvidia.com>
Reviewed-on: http://git-master/r/448063
(cherry picked from commit ac14ea698c1e9f3920eda7e3372f18f2fd4e68ce)
Change-Id: I42b6692c617f8be2771d6a6fbfa602262669c794
Signed-off-by: Pavan Kunapuli <pkunapuli@nvidia.com>
Reviewed-on: http://git-master/r/739544
Reviewed-by: Automatic_Commit_Validation_User
drivers/mmc/core/debugfs.c
drivers/mmc/core/sd.c
include/linux/mmc/card.h

index c01f0247083b2136fa1dd427c29b2908f809489a..08d34d86cab91081ac37a8a83a7c7c4f04cb569d 100644 (file)
@@ -474,6 +474,17 @@ static int mmc_dbg_card_status_get(void *data, u64 *val)
 DEFINE_SIMPLE_ATTRIBUTE(mmc_dbg_card_status_fops, mmc_dbg_card_status_get,
                NULL, "%08llx\n");
 
+static int mmc_dbg_card_speed_class_get(void *data, u64 *val)
+{
+       struct mmc_card *card = data;
+
+       *val = card->speed_class;
+
+       return 0;
+}
+DEFINE_SIMPLE_ATTRIBUTE(mmc_dbg_card_speed_class_fops,
+               mmc_dbg_card_speed_class_get, NULL, "%u\n");
+
 #define EXT_CSD_STR_LEN 1025
 
 static int mmc_ext_csd_open(struct inode *inode, struct file *filp)
@@ -569,6 +580,11 @@ void mmc_add_card_debugfs(struct mmc_card *card)
                                        &mmc_dbg_ext_csd_fops))
                        goto err;
 
+       if (mmc_card_sd(card))
+               if (!debugfs_create_file("speed_class", S_IRUSR, root, card,
+                                       &mmc_dbg_card_speed_class_fops))
+                       goto err;
+
        return;
 
 err:
index e1cda7a881c2ae46b69267f354fdb08b7cbe04b9..5b93c11848716c8f38fa52ee82a4306d3ac51cd2 100644 (file)
@@ -264,6 +264,7 @@ static int mmc_read_ssr(struct mmc_card *card)
                                card->ssr.erase_timeout = (et * 1000) / es;
                                card->ssr.erase_offset = eo * 1000;
                        }
+                       card->speed_class = UNSTUFF_BITS(ssr, 440 - 384, 8);
                } else {
                        pr_warn("%s: SD Status: Invalid Allocation Unit size\n",
                                mmc_hostname(card->host));
index b0692d28f8e649ec64d5f38db0a18967b547ff29..b66d868424ebb2b0d9616076cacddc94d985de6b 100644 (file)
@@ -280,6 +280,7 @@ struct mmc_card {
        unsigned int            erase_shift;    /* if erase unit is power 2 */
        unsigned int            pref_erase;     /* in sectors */
        u8                      erased_byte;    /* value of erased bytes */
+       u8                      speed_class;    /* speed class of card */
 
        u32                     raw_cid[4];     /* raw card CID */
        u32                     raw_csd[4];     /* raw card CSD */