Commit 137cd710 authored by Linus Walleij's avatar Linus Walleij

ARM: dts: Enable Gemini flash access

Some Gemini platforms have a parallel NOR flash which conflicts
with use cases reusing some of the flash lines (such as CE1)
for GPIO.

Fix this on the D-Link DIR-685 and Itian SQ201 by creating
"enabled" and "disabled" states for the flash pin control
handle, and rely on the flash handling code to switch this
in and out when accessed so these lines can be used
for GPIO when flash is not accessed, and enable flash
access.
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 738a05e6
...@@ -64,7 +64,6 @@ spi { ...@@ -64,7 +64,6 @@ spi {
gpio-sck = <&gpio1 5 GPIO_ACTIVE_HIGH>; gpio-sck = <&gpio1 5 GPIO_ACTIVE_HIGH>;
gpio-miso = <&gpio1 8 GPIO_ACTIVE_HIGH>; gpio-miso = <&gpio1 8 GPIO_ACTIVE_HIGH>;
gpio-mosi = <&gpio1 7 GPIO_ACTIVE_HIGH>; gpio-mosi = <&gpio1 7 GPIO_ACTIVE_HIGH>;
/* Collides with pflash CE1, not so cool */
cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>; cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
num-chipselects = <1>; num-chipselects = <1>;
...@@ -253,15 +252,18 @@ phy4: phy@4 { ...@@ -253,15 +252,18 @@ phy4: phy@4 {
soc { soc {
flash@30000000 { flash@30000000 {
/* /*
* Flash access is by default disabled, because it * Flash access collides with the Chip Enable signal for
* collides with the Chip Enable signal for the display * the display panel, that reuse the parallel flash Chip
* panel, that reuse the parallel flash Chip Select 1 * Select 1 (CS1). We switch the pin control state so we
* (CS1). Enabling flash makes graphics stop working. * enable these pins for flash access only when we need
* * then, and when disabled they can be used for GPIO which
* We might be able to hack around this by letting * is what the display panel needs.
* GPIO poke around in the flash controller registers.
*/ */
/* status = "okay"; */ status = "okay";
pinctrl-names = "enabled", "disabled";
pinctrl-0 = <&pflash_default_pins>;
pinctrl-1 = <&pflash_disabled_pins>;
/* 32MB of flash */ /* 32MB of flash */
reg = <0x30000000 0x02000000>; reg = <0x30000000 0x02000000>;
...@@ -327,7 +329,6 @@ mux { ...@@ -327,7 +329,6 @@ mux {
"gpio0cgrp", "gpio0cgrp",
"gpio0egrp", "gpio0egrp",
"gpio0fgrp", "gpio0fgrp",
"gpio0ggrp",
"gpio0hgrp"; "gpio0hgrp";
}; };
}; };
...@@ -342,6 +343,18 @@ mux { ...@@ -342,6 +343,18 @@ mux {
groups = "gpio1bgrp"; groups = "gpio1bgrp";
}; };
}; };
/*
* These GPIO groups will be mapped in over some
* of the flash pins when the flash is not in
* active use.
*/
pflash_disabled_pins: pinctrl-pflash-disabled {
mux {
function = "gpio0";
groups = "gpio0ggrp", "gpio0igrp", "gpio0jgrp",
"gpio0kgrp";
};
};
pinctrl-gmii { pinctrl-gmii {
mux { mux {
function = "gmii"; function = "gmii";
...@@ -430,7 +443,7 @@ ata@63000000 { ...@@ -430,7 +443,7 @@ ata@63000000 {
}; };
display-controller@6a000000 { display-controller@6a000000 {
status = "okay"; status = "disabled";
port@0 { port@0 {
reg = <0>; reg = <0>;
......
...@@ -41,14 +41,12 @@ leds { ...@@ -41,14 +41,12 @@ leds {
compatible = "gpio-leds"; compatible = "gpio-leds";
led-green-info { led-green-info {
label = "sq201:green:info"; label = "sq201:green:info";
/* Conflict with parallel flash */
gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>; gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
default-state = "on"; default-state = "on";
linux,default-trigger = "heartbeat"; linux,default-trigger = "heartbeat";
}; };
led-green-usb { led-green-usb {
label = "sq201:green:usb"; label = "sq201:green:usb";
/* Conflict with parallel and NAND flash */
gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
default-state = "off"; default-state = "off";
linux,default-trigger = "usb-host"; linux,default-trigger = "usb-host";
...@@ -126,15 +124,10 @@ fixed-link { ...@@ -126,15 +124,10 @@ fixed-link {
soc { soc {
flash@30000000 { flash@30000000 {
/* status = "okay";
* Flash access can be enabled, with the side effect pinctrl-names = "enabled", "disabled";
* of disabling access to GPIO LED on GPIO0[20] which pinctrl-0 = <&pflash_default_pins>;
* reuse one of the parallel flash chip select lines. pinctrl-1 = <&pflash_disabled_pins>;
* Also the default firmware on the machine has the
* problem that since it uses the flash, the two LEDS
* on the right become numb.
*/
/* status = "okay"; */
/* 16MB of flash */ /* 16MB of flash */
reg = <0x30000000 0x01000000>; reg = <0x30000000 0x01000000>;
...@@ -184,9 +177,7 @@ gpio0_default_pins: pinctrl-gpio0 { ...@@ -184,9 +177,7 @@ gpio0_default_pins: pinctrl-gpio0 {
mux { mux {
function = "gpio0"; function = "gpio0";
groups = "gpio0fgrp", groups = "gpio0fgrp",
"gpio0ggrp", "gpio0hgrp";
"gpio0hgrp",
"gpio0kgrp";
}; };
}; };
/* /*
...@@ -199,6 +190,18 @@ mux { ...@@ -199,6 +190,18 @@ mux {
groups = "gpio1dgrp"; groups = "gpio1dgrp";
}; };
}; };
/*
* These GPIO groups will be mapped in over some
* of the flash pins when the flash is not in
* active use.
*/
pflash_disabled_pins: pinctrl-pflash-disabled {
mux {
function = "gpio0";
groups = "gpio0ggrp", "gpio0igrp", "gpio0jgrp",
"gpio0kgrp";
};
};
pinctrl-gmii { pinctrl-gmii {
mux { mux {
function = "gmii"; function = "gmii";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment