libsdhcdrivers: Improve card capacity calculation

* Integer overflow is now avoided.
* Switch case is more readable.
diff --git a/libsdhcdrivers/src/mmc.c b/libsdhcdrivers/src/mmc.c
index 50f2789..22d518d 100644
--- a/libsdhcdrivers/src/mmc.c
+++ b/libsdhcdrivers/src/mmc.c
@@ -538,7 +538,6 @@
 long long mmc_card_capacity(mmc_card_t mmc_card)
 {
     int ret;
-    long long capacity;
     struct csd csd;
 
     ret = mmc_decode_csd(mmc_card, &csd);
@@ -546,16 +545,19 @@
         return -1;
     }
 
-    if (csd.structure == CSD_VERSION_1) {
-        capacity = (csd.c_size + 1) * (1U << (csd.c_size_mult + 2));
-        capacity *= (1U << csd.read_bl_len);
-    } else if (csd.structure == CSD_VERSION_2_AND_3) {
-        capacity = (csd.c_size + 1) * 512 * 1024;
-    } else {
+    long long c_size = (long long)csd.c_size;
+    switch (csd.structure) {
+    case CSD_VERSION_1: {
+        return (c_size + 1) * (1U << (csd.c_size_mult + 2))
+               * (1U << csd.read_bl_len);
+    }
+    case CSD_VERSION_2_AND_3: {
+        return (c_size + 1) * 512 * 1024;
+    }
+    default: {
         return -1;
     }
-
-    return capacity;
+    }
 }