ufs: Active Power Mode - configuring bActiveICCLevel
[pandora-kernel.git] / drivers / scsi / ufs / ufs.h
index fafcf5e..4ca99ed 100644 (file)
@@ -50,6 +50,8 @@
                        cpu_to_be32((byte3 << 24) | (byte2 << 16) |\
                         (byte1 << 8) | (byte0))
 
+#define UFS_UPIU_MAX_GENERAL_LUN       8
+
 /*
  * UFS Protocol Information Unit related definitions
  */
@@ -113,6 +115,7 @@ enum flag_idn {
 
 /* Attribute idn for Query requests */
 enum attr_idn {
+       QUERY_ATTR_IDN_ACTIVE_ICC_LVL   = 0x03,
        QUERY_ATTR_IDN_BKOPS_STATUS     = 0x05,
        QUERY_ATTR_IDN_EE_CONTROL       = 0x0D,
        QUERY_ATTR_IDN_EE_STATUS        = 0x0E,
@@ -129,10 +132,29 @@ enum desc_idn {
        QUERY_DESC_IDN_RFU_1            = 0x6,
        QUERY_DESC_IDN_GEOMETRY         = 0x7,
        QUERY_DESC_IDN_POWER            = 0x8,
-       QUERY_DESC_IDN_RFU_2            = 0x9,
+       QUERY_DESC_IDN_MAX,
+};
+
+enum desc_header_offset {
+       QUERY_DESC_LENGTH_OFFSET        = 0x00,
+       QUERY_DESC_DESC_TYPE_OFFSET     = 0x01,
+};
+
+enum ufs_desc_max_size {
+       QUERY_DESC_DEVICE_MAX_SIZE              = 0x1F,
+       QUERY_DESC_CONFIGURAION_MAX_SIZE        = 0x90,
+       QUERY_DESC_UNIT_MAX_SIZE                = 0x23,
+       QUERY_DESC_INTERCONNECT_MAX_SIZE        = 0x06,
+       /*
+        * Max. 126 UNICODE characters (2 bytes per character) plus 2 bytes
+        * of descriptor header.
+        */
+       QUERY_DESC_STRING_MAX_SIZE              = 0xFE,
+       QUERY_DESC_GEOMETRY_MAZ_SIZE            = 0x44,
+       QUERY_DESC_POWER_MAX_SIZE               = 0x62,
+       QUERY_DESC_RFU_MAX_SIZE                 = 0x00,
 };
 
-#define UNIT_DESC_MAX_SIZE       0x22
 /* Unit descriptor parameters offsets in bytes*/
 enum unit_desc_param {
        UNIT_DESC_PARAM_LEN                     = 0x0,
@@ -153,6 +175,31 @@ enum unit_desc_param {
        UNIT_DESC_PARAM_LARGE_UNIT_SIZE_M1      = 0x22,
 };
 
+/* bActiveICCLevel parameter current units */
+enum {
+       UFSHCD_NANO_AMP         = 0,
+       UFSHCD_MICRO_AMP        = 1,
+       UFSHCD_MILI_AMP         = 2,
+       UFSHCD_AMP              = 3,
+};
+
+#define POWER_DESC_MAX_SIZE                    0x62
+#define POWER_DESC_MAX_ACTV_ICC_LVLS           16
+
+/* Attribute  bActiveICCLevel parameter bit masks definitions */
+#define ATTR_ICC_LVL_UNIT_OFFSET       14
+#define ATTR_ICC_LVL_UNIT_MASK         (0x3 << ATTR_ICC_LVL_UNIT_OFFSET)
+#define ATTR_ICC_LVL_VALUE_MASK                0x3FF
+
+/* Power descriptor parameters offsets in bytes */
+enum power_desc_param_offset {
+       PWR_DESC_LEN                    = 0x0,
+       PWR_DESC_TYPE                   = 0x1,
+       PWR_DESC_ACTIVE_LVLS_VCC_0      = 0x2,
+       PWR_DESC_ACTIVE_LVLS_VCCQ_0     = 0x22,
+       PWR_DESC_ACTIVE_LVLS_VCCQ2_0    = 0x42,
+};
+
 /* Exception event mask values */
 enum {
        MASK_EE_STATUS          = 0xFFFF,
@@ -362,4 +409,30 @@ struct ufs_query_res {
        struct utp_upiu_query upiu_res;
 };
 
+#define UFS_VREG_VCC_MIN_UV       2700000 /* uV */
+#define UFS_VREG_VCC_MAX_UV       3600000 /* uV */
+#define UFS_VREG_VCC_1P8_MIN_UV    1700000 /* uV */
+#define UFS_VREG_VCC_1P8_MAX_UV    1950000 /* uV */
+#define UFS_VREG_VCCQ_MIN_UV      1100000 /* uV */
+#define UFS_VREG_VCCQ_MAX_UV      1300000 /* uV */
+#define UFS_VREG_VCCQ2_MIN_UV     1650000 /* uV */
+#define UFS_VREG_VCCQ2_MAX_UV     1950000 /* uV */
+
+struct ufs_vreg {
+       struct regulator *reg;
+       const char *name;
+       bool enabled;
+       int min_uV;
+       int max_uV;
+       int min_uA;
+       int max_uA;
+};
+
+struct ufs_vreg_info {
+       struct ufs_vreg *vcc;
+       struct ufs_vreg *vccq;
+       struct ufs_vreg *vccq2;
+       struct ufs_vreg *vdd_hba;
+};
+
 #endif /* End of Header */