#define  TEGRA186_GPIO_SCR_SEC_REN             BIT(27)
 #define  TEGRA186_GPIO_SCR_SEC_G1W             BIT(9)
 #define  TEGRA186_GPIO_SCR_SEC_G1R             BIT(1)
-#define  TEGRA186_GPIO_FULL_ACCESS             (TEGRA186_GPIO_SCR_SEC_WEN | \
-                                                TEGRA186_GPIO_SCR_SEC_REN | \
-                                                TEGRA186_GPIO_SCR_SEC_G1R | \
-                                                TEGRA186_GPIO_SCR_SEC_G1W)
-#define  TEGRA186_GPIO_SCR_SEC_ENABLE          (TEGRA186_GPIO_SCR_SEC_WEN | \
-                                                TEGRA186_GPIO_SCR_SEC_REN)
 
 /* control registers */
 #define TEGRA186_GPIO_ENABLE_CONFIG 0x00
 
        value = __raw_readl(secure + TEGRA186_GPIO_SCR);
 
-       if ((value & TEGRA186_GPIO_SCR_SEC_ENABLE) == 0)
-               return true;
+       /*
+        * When SCR_SEC_[R|W]EN is unset, then we have full read/write access to all the
+        * registers for given GPIO pin.
+        * When SCR_SEC[R|W]EN is set, then there is need to further check the accompanying
+        * SCR_SEC_G1[R|W] bit to determine read/write access to all the registers for given
+        * GPIO pin.
+        */
 
-       if ((value & TEGRA186_GPIO_FULL_ACCESS) == TEGRA186_GPIO_FULL_ACCESS)
+       if (((value & TEGRA186_GPIO_SCR_SEC_REN) == 0 ||
+            ((value & TEGRA186_GPIO_SCR_SEC_REN) && (value & TEGRA186_GPIO_SCR_SEC_G1R))) &&
+            ((value & TEGRA186_GPIO_SCR_SEC_WEN) == 0 ||
+            ((value & TEGRA186_GPIO_SCR_SEC_WEN) && (value & TEGRA186_GPIO_SCR_SEC_G1W))))
                return true;
 
        return false;