* [PATCH] ARM64: boot: dts: Add regulators for Tegra210 Smaug
@ 2016-06-03 20:22 Rhyland Klein
[not found] ` <1464985365-11612-1-git-send-email-rklein-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Rhyland Klein @ 2016-06-03 20:22 UTC (permalink / raw)
To: Laxman Dewangan, Thierry Reding
Cc: Stephen Warren, Jon Hunter, Alexandre Courbot, Andrew Bresticker,
devicetree-u79uwXL29TY76Z2rM5mHXA,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rhyland Klein
Add regulators to the Tegra210 Smaug DTS file including
support for the max77620 PMIC.
Signed-off-by: Rhyland Klein <rklein-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
arch/arm64/boot/dts/nvidia/tegra210-smaug.dts | 350 ++++++++++++++++++++++++++
1 file changed, 350 insertions(+)
diff --git a/arch/arm64/boot/dts/nvidia/tegra210-smaug.dts b/arch/arm64/boot/dts/nvidia/tegra210-smaug.dts
index 4d89f4e02d98..fdca5b5d79e8 100644
--- a/arch/arm64/boot/dts/nvidia/tegra210-smaug.dts
+++ b/arch/arm64/boot/dts/nvidia/tegra210-smaug.dts
@@ -1,6 +1,7 @@
/dts-v1/;
#include <dt-bindings/input/input.h>
+#include <dt-bindings/mfd/max77620.h>
#include <dt-bindings/pinctrl/pinctrl-tegra.h>
#include "tegra210.dtsi"
@@ -1327,6 +1328,269 @@
};
};
+ i2c@7000d000 {
+ status = "okay";
+ clock-frequency = <1000000>;
+
+ max77620: max77620@3c {
+ compatible = "maxim,max77620";
+ reg = <0x3c>;
+ interrupts = <0 86 IRQ_TYPE_NONE>;
+
+ #interrupt-cells = <2>;
+ interrupt-controller;
+
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&max77620_default>;
+
+ max77620_default: pinmux@0 {
+ pin_gpio {
+ pins = "gpio0", "gpio1", "gpio2", "gpio5",
+ "gpio6", "gpio7";
+ function = "gpio";
+ };
+
+ /*
+ * GPIO3 is used to en_pp3300, and it is part of power
+ * sequence, So it must be sequenced up (automatically
+ * set by OTP) and down properly.
+ */
+ pin_gpio3 {
+ pins = "gpio3";
+ function = "fps-out";
+ drive-open-drain = <1>;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
+ maxim,active-fps-power-up-slot = <4>;
+ maxim,active-fps-power-down-slot = <2>;
+ };
+
+ pin_gpio5_6_7 {
+ pins = "gpio5", "gpio6";
+ function = "gpio";
+ drive-push-pull = <1>;
+ };
+
+ pin_32k {
+ pins = "gpio4";
+ function = "32k-out1";
+ };
+ };
+
+ fps {
+ fps0 {
+ maxim,shutdown-fps-time-period-us = <5120>;
+ maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
+ };
+
+ fps1 {
+ maxim,shutdown-fps-time-period-us = <5120>;
+ maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN1>;
+ maxim,enable-sleep;
+ };
+
+ fps2 {
+ maxim,fps-event-source = <MAX77620_FPS_EVENT_SRC_EN0>;
+ };
+ };
+
+ regulators {
+ in-ldo0-1-supply = <&pp1350>;
+ in-ldo2-supply = <&pp3300>;
+ in-ldo3-5-supply = <&pp3300>;
+ in-ldo7-8-supply = <&pp1350>;
+
+ ppvar_soc: sd0 {
+ regulator-name = "PPVAR_SOC";
+ regulator-min-microvolt = <825000>;
+ regulator-max-microvolt = <1125000>;
+ regulator-enable-ramp-delay = <146>;
+ regulator-disable-ramp-delay = <4080>;
+ regulator-ramp-delay = <27500>;
+ regulator-ramp-delay-scale = <300>;
+ regulator-always-on;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_1>;
+ maxim,active-fps-power-up-slot = <1>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp1100_sd1: sd1 {
+ regulator-name = "PP1100";
+ regulator-min-microvolt = <1125000>;
+ regulator-max-microvolt = <1125000>;
+ regulator-enable-ramp-delay = <130>;
+ regulator-disable-ramp-delay = <145800>;
+ regulator-ramp-delay = <27500>;
+ regulator-ramp-delay-scale = <300>;
+ regulator-always-on;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
+ maxim,active-fps-power-up-slot = <5>;
+ maxim,active-fps-power-down-slot = <1>;
+ };
+
+ pp1350: sd2 {
+ regulator-name = "PP1350";
+ regulator-min-microvolt = <1350000>;
+ regulator-max-microvolt = <1350000>;
+ regulator-enable-ramp-delay = <176>;
+ regulator-disable-ramp-delay = <32000>;
+ regulator-ramp-delay = <27500>;
+ regulator-ramp-delay-scale = <350>;
+ regulator-always-on;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <2>;
+ maxim,active-fps-power-down-slot = <5>;
+ };
+
+ pp1800: sd3 {
+ regulator-name = "PP1800";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <242>;
+ regulator-disable-ramp-delay = <118000>;
+ regulator-ramp-delay = <27500>;
+ regulator-ramp-delay-scale = <360>;
+ regulator-always-on;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
+ maxim,active-fps-power-up-slot = <3>;
+ maxim,active-fps-power-down-slot = <3>;
+ };
+
+ pp1200_avdd: ldo0 {
+ regulator-name = "PP1200_AVDD";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-enable-ramp-delay = <26>;
+ regulator-disable-ramp-delay = <626>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp1200_rcam: ldo1 {
+ regulator-name = "PP1200_RCAM";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-enable-ramp-delay = <22>;
+ regulator-disable-ramp-delay = <630>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp_ldo2: ldo2 {
+ regulator-name = "PP_LDO2";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <62>;
+ regulator-disable-ramp-delay = <650>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ regulator-always-on;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp2800l_rcam: ldo3 {
+ regulator-name = "PP2800L_RCAM";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <50>;
+ regulator-disable-ramp-delay = <1110>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp100_soc_rtc: ldo4 {
+ regulator-name = "PP1100_SOC_RTC";
+ regulator-min-microvolt = <850000>;
+ regulator-max-microvolt = <850000>;
+ regulator-enable-ramp-delay = <22>;
+ regulator-disable-ramp-delay = <610>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ regulator-always-on; /* Check this */
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
+ maxim,active-fps-power-up-slot = <1>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp2800l_fcam: ldo5 {
+ regulator-name = "PP2800L_FCAM";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <62>;
+ regulator-disable-ramp-delay = <640>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ ldo6 {
+ /* Unused. */
+ regulator-name = "PP_LDO6";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <36>;
+ regulator-disable-ramp-delay = <674>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+
+ pp1050_avdd: ldo7 {
+ regulator-name = "PP1050_AVDD";
+ regulator-min-microvolt = <1050000>;
+ regulator-max-microvolt = <1050000>;
+ regulator-enable-ramp-delay = <24>;
+ regulator-disable-ramp-delay = <2768>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ regulator-always-on;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_1>;
+ maxim,active-fps-power-up-slot = <3>;
+ maxim,active-fps-power-down-slot = <4>;
+ };
+
+ avddio_1v05: ldo8 {
+ regulator-name = "AVDDIO_1V05";
+ regulator-min-microvolt = <1050000>;
+ regulator-max-microvolt = <1050000>;
+ regulator-enable-ramp-delay = <22>;
+ regulator-disable-ramp-delay = <1160>;
+ regulator-ramp-delay = <100000>;
+ regulator-ramp-delay-scale = <200>;
+ regulator-boot-on;
+ maxim,active-fps-source = <MAX77620_FPS_SRC_NONE>;
+ maxim,active-fps-power-up-slot = <0>;
+ maxim,active-fps-power-down-slot = <7>;
+ };
+ };
+ };
+ };
+
pmc@7000e400 {
nvidia,invert-interrupt;
nvidia,suspend-mode = <0>;
@@ -1421,4 +1685,90 @@
compatible = "arm,psci-1.0";
method = "smc";
};
+
+ regulators {
+ compatible = "simple-bus";
+ device_type = "fixed-regulators";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ppvar_sys: regulator@0 {
+ compatible = "regulator-fixed";
+ reg = <0>;
+ regulator-name = "PPVAR_SYS";
+ regulator-min-microvolt = <4400000>;
+ regulator-max-microvolt = <4400000>;
+ regulator-always-on;
+ };
+
+ pplcd_vdd: regulator@1 {
+ compatible = "regulator-fixed";
+ reg = <1>;
+ regulator-name = "PPLCD_VDD";
+ regulator-min-microvolt = <4400000>;
+ regulator-max-microvolt = <4400000>;
+ gpio = <&gpio TEGRA_GPIO(V, 4) 0>;
+ enable-active-high;
+ regulator-boot-on;
+ };
+
+ pp3000_always: regulator@2 {
+ compatible = "regulator-fixed";
+ reg = <2>;
+ regulator-name = "PP3000_ALWAYS";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-always-on;
+ };
+
+ pp3300: regulator@3 {
+ compatible = "regulator-fixed";
+ reg = <3>;
+ regulator-name = "PP3300";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ regulator-always-on;
+ gpio = <&max77620 3 0>;
+ enable-active-high;
+ };
+
+ pp5000: regulator@4 {
+ compatible = "regulator-fixed";
+ reg = <4>;
+ regulator-name = "PP5000";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-always-on;
+ };
+
+ pp1800_lcdio: regulator@5 {
+ compatible = "regulator-fixed";
+ reg = <5>;
+ regulator-name = "PP1800_LCDIO";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ gpio = <&gpio TEGRA_GPIO(V, 3) 0>;
+ enable-active-high;
+ regulator-boot-on;
+ };
+
+ pp1800_cam: regulator@6 {
+ compatible = "regulator-fixed";
+ reg= <6>;
+ regulator-name = "PP1800_CAM";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ gpio = <&gpio TEGRA_GPIO(K, 3) 0>;
+ enable-active-high;
+ };
+
+ usbc_vbus: regulator@7 {
+ compatible = "regulator-fixed";
+ reg = <7>;
+ regulator-name = "USBC_VBUS";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ };
+ };
};
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] ARM64: boot: dts: Add regulators for Tegra210 Smaug
[not found] ` <1464985365-11612-1-git-send-email-rklein-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2016-06-06 6:39 ` Laxman Dewangan
2016-06-06 21:52 ` Rhyland Klein
0 siblings, 1 reply; 4+ messages in thread
From: Laxman Dewangan @ 2016-06-06 6:39 UTC (permalink / raw)
To: Rhyland Klein, Thierry Reding
Cc: Stephen Warren, Jon Hunter, Alexandre Courbot, Andrew Bresticker,
devicetree-u79uwXL29TY76Z2rM5mHXA,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
On Saturday 04 June 2016 01:52 AM, Rhyland Klein wrote:
> +
> + max77620_default: pinmux@0 {
> + pin_gpio {
> + pins = "gpio0", "gpio1", "gpio2", "gpio5",
> + "gpio6", "gpio7";
gpio5 and gpio6 are already there in below nodes and hence it is not
needed here.
> + function = "gpio";
> + };
> +
> + /*
> + * GPIO3 is used to en_pp3300, and it is part of power
> + * sequence, So it must be sequenced up (automatically
> + * set by OTP) and down properly.
> + */
> + pin_gpio3 {
> + pins = "gpio3";
> + function = "fps-out";
> + drive-open-drain = <1>;
> + maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
> + maxim,active-fps-power-up-slot = <4>;
> + maxim,active-fps-power-down-slot = <2>;
> + };
> +
> + pin_gpio5_6_7 {
node name should be gpio5_6 as there is no gpio7 inside this node.
> +
> + regulators {
> + in-ldo0-1-supply = <&pp1350>;
> + in-ldo2-supply = <&pp3300>;
> + in-ldo3-5-supply = <&pp3300>;
> + in-ldo7-8-supply = <&pp1350>;
> +
> + ppvar_soc: sd0 {
> + regulator-name = "PPVAR_SOC";
> + regulator-min-microvolt = <825000>;
> + regulator-max-microvolt = <1125000>;
> + regulator-enable-ramp-delay = <146>;
> + regulator-disable-ramp-delay = <4080>;
> + regulator-ramp-delay = <27500>;
> + regulator-ramp-delay-scale = <300>;
There is no disable-ramp-delay in mainline.
Please use the correct value for property as:
regulator-ramp-delay = <9000>;
maxim,ramp-rate-setting = <27500>;
instead of regulator-ramp-delay and regulator-ramp-delay-scale.
The property differs from downstream.
regulator-ramp-delay is what you see in platform and
maxim,ramp-rate-setting is what you want in register.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ARM64: boot: dts: Add regulators for Tegra210 Smaug
2016-06-06 6:39 ` Laxman Dewangan
@ 2016-06-06 21:52 ` Rhyland Klein
[not found] ` <b28b44d9-7f3e-c1bb-7df8-238191ab1941-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: Rhyland Klein @ 2016-06-06 21:52 UTC (permalink / raw)
To: Laxman Dewangan, Thierry Reding
Cc: Stephen Warren, Jon Hunter, Alexandre Courbot, Andrew Bresticker,
devicetree, linux-tegra, linux-kernel
On 6/6/2016 2:39 AM, Laxman Dewangan wrote:
>
> On Saturday 04 June 2016 01:52 AM, Rhyland Klein wrote:
>> +
>> + max77620_default: pinmux@0 {
>> + pin_gpio {
>> + pins = "gpio0", "gpio1", "gpio2", "gpio5",
>> + "gpio6", "gpio7";
> gpio5 and gpio6 are already there in below nodes and hence it is not
> needed here.
Yep thanks.
>
>> + function = "gpio";
>> + };
>> +
>> + /*
>> + * GPIO3 is used to en_pp3300, and it is part of power
>> + * sequence, So it must be sequenced up (automatically
>> + * set by OTP) and down properly.
>> + */
>> + pin_gpio3 {
>> + pins = "gpio3";
>> + function = "fps-out";
>> + drive-open-drain = <1>;
>> + maxim,active-fps-source = <MAX77620_FPS_SRC_0>;
>> + maxim,active-fps-power-up-slot = <4>;
>> + maxim,active-fps-power-down-slot = <2>;
>> + };
>> +
>> + pin_gpio5_6_7 {
> node name should be gpio5_6 as there is no gpio7 inside this node.
Thanks.
>
>
>> +
>> + regulators {
>> + in-ldo0-1-supply = <&pp1350>;
>> + in-ldo2-supply = <&pp3300>;
>> + in-ldo3-5-supply = <&pp3300>;
>> + in-ldo7-8-supply = <&pp1350>;
>> +
>> + ppvar_soc: sd0 {
>> + regulator-name = "PPVAR_SOC";
>> + regulator-min-microvolt = <825000>;
>> + regulator-max-microvolt = <1125000>;
>> + regulator-enable-ramp-delay = <146>;
>> + regulator-disable-ramp-delay = <4080>;
>> + regulator-ramp-delay = <27500>;
>> + regulator-ramp-delay-scale = <300>;
>
> There is no disable-ramp-delay in mainline.
> Please use the correct value for property as:
> regulator-ramp-delay = <9000>;
> maxim,ramp-rate-setting = <27500>;
>
>
> instead of regulator-ramp-delay and regulator-ramp-delay-scale.
> The property differs from downstream.
>
> regulator-ramp-delay is what you see in platform and
> maxim,ramp-rate-setting is what you want in register.
Where does "<9000>" come from in the above comment? It looks like
maxim,ramp-rate-setting sets the slew rate, and regulator-ramp-delay
will as well, but will be ignored if maxim,ramp-delay-setting is set. So
does it ever make sense to have both defined for a regulator? And if
not, should max77620 regulators just use the maxim property and not the
regulator core property?
-rhyland
--
nvpublic
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ARM64: boot: dts: Add regulators for Tegra210 Smaug
[not found] ` <b28b44d9-7f3e-c1bb-7df8-238191ab1941-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
@ 2016-06-07 11:35 ` Laxman Dewangan
0 siblings, 0 replies; 4+ messages in thread
From: Laxman Dewangan @ 2016-06-07 11:35 UTC (permalink / raw)
To: Rhyland Klein, Thierry Reding
Cc: Stephen Warren, Jon Hunter, Alexandre Courbot, Andrew Bresticker,
devicetree-u79uwXL29TY76Z2rM5mHXA,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
On Tuesday 07 June 2016 03:22 AM, Rhyland Klein wrote:
> On 6/6/2016 2:39 AM, Laxman Dewangan wrote:
>> On Saturday 04 June 2016 01:52 AM, Rhyland Klein wrote:
>>> + regulator-disable-ramp-delay = <4080>;
>>> + regulator-ramp-delay = <27500>;
>>> + regulator-ramp-delay-scale = <300>;
>> There is no disable-ramp-delay in mainline.
>> Please use the correct value for property as:
>> regulator-ramp-delay = <9000>;
>> maxim,ramp-rate-setting = <27500>;
>>
>>
>> instead of regulator-ramp-delay and regulator-ramp-delay-scale.
>> The property differs from downstream.
>>
>> regulator-ramp-delay is what you see in platform and
>> maxim,ramp-rate-setting is what you want in register.
> Where does "<9000>" come from in the above comment? It looks like
> maxim,ramp-rate-setting sets the slew rate, and regulator-ramp-delay
> will as well, but will be ignored if maxim,ramp-delay-setting is set. So
> does it ever make sense to have both defined for a regulator? And if
> not, should max77620 regulators just use the maxim property and not the
> regulator core property?
>
9000uV/us is what measured ramp delay in the platform after setting the
device register to 27500uV/us.
This is derived from our downstream table as ramp-delay *100/scale
so here 27500 *100/300 is approx to 9000.
This is used when your measured is varied from register configuration
which is true in most of our platform.
If your platform does not have diff then please provide
regulator-ramp-delay only with what you measured.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-06-07 11:35 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-03 20:22 [PATCH] ARM64: boot: dts: Add regulators for Tegra210 Smaug Rhyland Klein
[not found] ` <1464985365-11612-1-git-send-email-rklein-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-06-06 6:39 ` Laxman Dewangan
2016-06-06 21:52 ` Rhyland Klein
[not found] ` <b28b44d9-7f3e-c1bb-7df8-238191ab1941-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2016-06-07 11:35 ` Laxman Dewangan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).