linux-sh.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0
@ 2012-04-05  8:33 Kuninori Morimoto
  2012-04-05 21:41 ` Simon Horman
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Kuninori Morimoto @ 2012-04-05  8:33 UTC (permalink / raw)
  To: linux-sh

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 arch/arm/mach-shmobile/board-armadillo800eva.c |  112 ++++++++++++++++++++++++
 1 files changed, 112 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c
index 1ca153b..58d2ba1 100644
--- a/arch/arm/mach-shmobile/board-armadillo800eva.c
+++ b/arch/arm/mach-shmobile/board-armadillo800eva.c
@@ -25,6 +25,7 @@
 #include <linux/irq.h>
 #include <linux/platform_device.h>
 #include <linux/gpio.h>
+#include <linux/videodev2.h>
 #include <mach/common.h>
 #include <asm/page.h>
 #include <asm/mach-types.h>
@@ -33,6 +34,7 @@
 #include <asm/mach/time.h>
 #include <asm/hardware/cache-l2x0.h>
 #include <mach/r8a7740.h>
+#include <video/sh_mobile_lcdc.h>
 
 /*
  * CON1		Camera Module
@@ -92,10 +94,66 @@
  *-----------+---------------+----------------------------
  */
 
+/* LCDC */
+static struct fb_videomode lcdc0_mode = {
+	.name		= "AMPIER/AM-800480",
+	.xres		= 800,
+	.yres		= 480,
+	.left_margin	= 88,
+	.right_margin	= 40,
+	.hsync_len	= 128,
+	.upper_margin	= 20,
+	.lower_margin	= 5,
+	.vsync_len	= 5,
+	.sync		= 0,
+};
+
+static struct sh_mobile_lcdc_info lcdc0_info = {
+	.clock_source	= LCDC_CLK_BUS,
+	.ch[0] = {
+		.chan		= LCDC_CHAN_MAINLCD,
+		.fourcc		= V4L2_PIX_FMT_RGB565,
+		.interface_type	= RGB24,
+		.clock_divider	= 5,
+		.flags		= 0,
+		.lcd_cfg	= &lcdc0_mode,
+		.num_cfg	= 1,
+		.lcd_size_cfg = {
+			.width	= 111,
+			.height = 68,
+		},
+	},
+};
+
+static struct resource lcdc0_resources[] = {
+	[0] = {
+		.name	= "LCD0",
+		.start	= 0xfe940000,
+		.end	= 0xfe943fff,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= intcs_evt2irq(0x580),
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct platform_device lcdc0_device = {
+	.name		= "sh_mobile_lcdc_fb",
+	.num_resources	= ARRAY_SIZE(lcdc0_resources),
+	.resource	= lcdc0_resources,
+	.id		= 0,
+	.dev	= {
+		.platform_data	= &lcdc0_info,
+		.coherent_dma_mask = ~0,
+	},
+};
+
 /*
  * board devices
  */
 static struct platform_device *eva_devices[] __initdata = {
+	&lcdc0_device,
 };
 
 /*
@@ -109,6 +167,53 @@ static void __init eva_init(void)
 	gpio_request(GPIO_FN_SCIFA1_RXD, NULL);
 	gpio_request(GPIO_FN_SCIFA1_TXD, NULL);
 
+	/* LCDC0 */
+	gpio_request(GPIO_FN_LCDC0_SELECT,	NULL);
+	gpio_request(GPIO_FN_LCD0_D0,		NULL);
+	gpio_request(GPIO_FN_LCD0_D1,		NULL);
+	gpio_request(GPIO_FN_LCD0_D2,		NULL);
+	gpio_request(GPIO_FN_LCD0_D3,		NULL);
+	gpio_request(GPIO_FN_LCD0_D4,		NULL);
+	gpio_request(GPIO_FN_LCD0_D5,		NULL);
+	gpio_request(GPIO_FN_LCD0_D6,		NULL);
+	gpio_request(GPIO_FN_LCD0_D7,		NULL);
+	gpio_request(GPIO_FN_LCD0_D8,		NULL);
+	gpio_request(GPIO_FN_LCD0_D9,		NULL);
+	gpio_request(GPIO_FN_LCD0_D10,		NULL);
+	gpio_request(GPIO_FN_LCD0_D11,		NULL);
+	gpio_request(GPIO_FN_LCD0_D12,		NULL);
+	gpio_request(GPIO_FN_LCD0_D13,		NULL);
+	gpio_request(GPIO_FN_LCD0_D14,		NULL);
+	gpio_request(GPIO_FN_LCD0_D15,		NULL);
+	gpio_request(GPIO_FN_LCD0_D16,		NULL);
+	gpio_request(GPIO_FN_LCD0_D17,		NULL);
+	gpio_request(GPIO_FN_LCD0_D18_PORT40,	NULL);
+	gpio_request(GPIO_FN_LCD0_D19_PORT4,	NULL);
+	gpio_request(GPIO_FN_LCD0_D20_PORT3,	NULL);
+	gpio_request(GPIO_FN_LCD0_D21_PORT2,	NULL);
+	gpio_request(GPIO_FN_LCD0_D22_PORT0,	NULL);
+	gpio_request(GPIO_FN_LCD0_D23_PORT1,	NULL);
+	gpio_request(GPIO_FN_LCD0_DCK,		NULL);
+	gpio_request(GPIO_FN_LCD0_VSYN,		NULL);
+	gpio_request(GPIO_FN_LCD0_HSYN,		NULL);
+	gpio_request(GPIO_FN_LCD0_DISP,		NULL);
+	gpio_request(GPIO_FN_LCD0_LCLK_PORT165,	NULL);
+
+	gpio_request(GPIO_PORT61, NULL); /* LCDDON */
+	gpio_direction_output(GPIO_PORT61, 1);
+
+	gpio_request(GPIO_PORT202, NULL); /* LCD0_LED_CONT */
+	gpio_direction_output(GPIO_PORT202, 0);
+
+	/*
+	 * CAUTION
+	 *
+	 * DBGMD/LCDC0/FSIA MUX
+	 * DBGMD_SELECT_B should be set after setting PFC Function.
+	 */
+	gpio_request(GPIO_PORT176, NULL);
+	gpio_direction_output(GPIO_PORT176, 1);
+
 #ifdef CONFIG_CACHE_L2X0
 	/* Early BRESP enable, Shared attribute override enable, 32K*8way */
 	l2x0_init(__io(0xf0002000), 0x40440000, 0x82000fff);
@@ -138,6 +243,13 @@ static void __init eva_earlytimer_init(void)
 
 static void __init eva_add_early_devices(void)
 {
+
+	/*
+	 *  The default 2MB size isn't
+	 * enough to allocate the frame buffer memory.
+	 */
+	init_consistent_dma_size(12 << 20);
+
 	r8a7740_add_early_devices();
 
 	/* override timer setup with board-specific code */
-- 
1.7.5.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0
  2012-04-05  8:33 [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0 Kuninori Morimoto
@ 2012-04-05 21:41 ` Simon Horman
  2012-04-06  5:16 ` Kuninori Morimoto
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Simon Horman @ 2012-04-05 21:41 UTC (permalink / raw)
  To: linux-sh

Hi Morimoto-san,

I ran across a few minor problems after apply your series on top
of the current linux/master -- "Merge tag 'for_linus-3.4-rc2' of
git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/kgdb"
(6c216ec636f75d834461be15f83ec41a6759bd2b).

On Thu, Apr 05, 2012 at 01:33:50AM -0700, Kuninori Morimoto wrote:
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
>  arch/arm/mach-shmobile/board-armadillo800eva.c |  112 ++++++++++++++++++++++++
>  1 files changed, 112 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c
> index 1ca153b..58d2ba1 100644
> --- a/arch/arm/mach-shmobile/board-armadillo800eva.c
> +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c
> @@ -25,6 +25,7 @@
>  #include <linux/irq.h>
>  #include <linux/platform_device.h>
>  #include <linux/gpio.h>
> +#include <linux/videodev2.h>
>  #include <mach/common.h>

Locally, I added #include <mach/irqs.h> here in order to have evt2irq()
which is used further down, though I am unsure if that is the correct course
of action.

This appears to be the first patch in your series that makes use of
evt2irq(). It is also used in the sh_eth and ST1232 patches in your series.

evt2irq() was moved from arch/sh/include/asm/irq.h
toinclude/linux/sh_intc.h by "sh: intc: unify evt2irq/irq2evt macros for sh
and arm" (7f1e76370b717be264f0af54719182a96fb8f36d). The same patch
includes linux/sh_intc.h in arch/arm/mach-shmobile/include/mach/irqs.h.

>  #include <asm/page.h>
>  #include <asm/mach-types.h>
> @@ -33,6 +34,7 @@
>  #include <asm/mach/time.h>
>  #include <asm/hardware/cache-l2x0.h>
>  #include <mach/r8a7740.h>
> +#include <video/sh_mobile_lcdc.h>
>  
>  /*
>   * CON1		Camera Module
> @@ -92,10 +94,66 @@
>   *-----------+---------------+----------------------------
>   */
>  
> +/* LCDC */
> +static struct fb_videomode lcdc0_mode = {
> +	.name		= "AMPIER/AM-800480",
> +	.xres		= 800,
> +	.yres		= 480,
> +	.left_margin	= 88,
> +	.right_margin	= 40,
> +	.hsync_len	= 128,
> +	.upper_margin	= 20,
> +	.lower_margin	= 5,
> +	.vsync_len	= 5,
> +	.sync		= 0,
> +};
> +
> +static struct sh_mobile_lcdc_info lcdc0_info = {
> +	.clock_source	= LCDC_CLK_BUS,
> +	.ch[0] = {
> +		.chan		= LCDC_CHAN_MAINLCD,
> +		.fourcc		= V4L2_PIX_FMT_RGB565,
> +		.interface_type	= RGB24,
> +		.clock_divider	= 5,
> +		.flags		= 0,
> +		.lcd_cfg	= &lcdc0_mode,
> +		.num_cfg	= 1,

.lcd_cfg was changes to .lcd_modes and .num_cfg was changed to .num_modes
by "fbdev: sh_mobile_lcdc: Rename (lcd|num)_cfg (lcd|num)_modes"
(93ff259846a774ff37dca54792c5a3a6425882c0). I think it is sufficient to
just change the names above accordingly.

> +		.lcd_size_cfg = {
> +			.width	= 111,
> +			.height = 68,
> +		},

.lcd_size_cfg and .board_cfg were merged into .panel_cfg
by "fbdev: sh_mobile_lcdc: Merge board_cfg and lcd_size_cfg into panel_cfg"
(afaad83b9c0d24eac88535cc5a8c6019f0c45bcb). I think it is sufficient to
change  .lcd_size_cfg to .panel_cfg above.

> +	},
> +};
> +
> +static struct resource lcdc0_resources[] = {
> +	[0] = {
> +		.name	= "LCD0",
> +		.start	= 0xfe940000,
> +		.end	= 0xfe943fff,
> +		.flags	= IORESOURCE_MEM,
> +	},
> +	[1] = {
> +		.start	= intcs_evt2irq(0x580),
> +		.flags	= IORESOURCE_IRQ,
> +	},
> +};
> +
> +static struct platform_device lcdc0_device = {
> +	.name		= "sh_mobile_lcdc_fb",
> +	.num_resources	= ARRAY_SIZE(lcdc0_resources),
> +	.resource	= lcdc0_resources,
> +	.id		= 0,
> +	.dev	= {
> +		.platform_data	= &lcdc0_info,
> +		.coherent_dma_mask = ~0,
> +	},
> +};
> +
>  /*
>   * board devices
>   */
>  static struct platform_device *eva_devices[] __initdata = {
> +	&lcdc0_device,
>  };
>  
>  /*
> @@ -109,6 +167,53 @@ static void __init eva_init(void)
>  	gpio_request(GPIO_FN_SCIFA1_RXD, NULL);
>  	gpio_request(GPIO_FN_SCIFA1_TXD, NULL);
>  
> +	/* LCDC0 */
> +	gpio_request(GPIO_FN_LCDC0_SELECT,	NULL);
> +	gpio_request(GPIO_FN_LCD0_D0,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D1,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D2,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D3,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D4,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D5,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D6,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D7,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D8,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D9,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D10,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D11,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D12,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D13,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D14,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D15,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D16,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D17,		NULL);
> +	gpio_request(GPIO_FN_LCD0_D18_PORT40,	NULL);
> +	gpio_request(GPIO_FN_LCD0_D19_PORT4,	NULL);
> +	gpio_request(GPIO_FN_LCD0_D20_PORT3,	NULL);
> +	gpio_request(GPIO_FN_LCD0_D21_PORT2,	NULL);
> +	gpio_request(GPIO_FN_LCD0_D22_PORT0,	NULL);
> +	gpio_request(GPIO_FN_LCD0_D23_PORT1,	NULL);
> +	gpio_request(GPIO_FN_LCD0_DCK,		NULL);
> +	gpio_request(GPIO_FN_LCD0_VSYN,		NULL);
> +	gpio_request(GPIO_FN_LCD0_HSYN,		NULL);
> +	gpio_request(GPIO_FN_LCD0_DISP,		NULL);
> +	gpio_request(GPIO_FN_LCD0_LCLK_PORT165,	NULL);
> +
> +	gpio_request(GPIO_PORT61, NULL); /* LCDDON */
> +	gpio_direction_output(GPIO_PORT61, 1);
> +
> +	gpio_request(GPIO_PORT202, NULL); /* LCD0_LED_CONT */
> +	gpio_direction_output(GPIO_PORT202, 0);
> +
> +	/*
> +	 * CAUTION
> +	 *
> +	 * DBGMD/LCDC0/FSIA MUX
> +	 * DBGMD_SELECT_B should be set after setting PFC Function.
> +	 */
> +	gpio_request(GPIO_PORT176, NULL);
> +	gpio_direction_output(GPIO_PORT176, 1);
> +
>  #ifdef CONFIG_CACHE_L2X0
>  	/* Early BRESP enable, Shared attribute override enable, 32K*8way */
>  	l2x0_init(__io(0xf0002000), 0x40440000, 0x82000fff);
> @@ -138,6 +243,13 @@ static void __init eva_earlytimer_init(void)
>  
>  static void __init eva_add_early_devices(void)
>  {
> +
> +	/*
> +	 *  The default 2MB size isn't
> +	 * enough to allocate the frame buffer memory.
> +	 */
> +	init_consistent_dma_size(12 << 20);
> +
>  	r8a7740_add_early_devices();
>  
>  	/* override timer setup with board-specific code */
> -- 
> 1.7.5.4
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0
  2012-04-05  8:33 [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0 Kuninori Morimoto
  2012-04-05 21:41 ` Simon Horman
@ 2012-04-06  5:16 ` Kuninori Morimoto
  2012-06-15 15:17 ` [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: Add backlight support Laurent Pinchart
  2012-06-18  2:11 ` Simon Horman
  3 siblings, 0 replies; 5+ messages in thread
From: Kuninori Morimoto @ 2012-04-06  5:16 UTC (permalink / raw)
  To: linux-sh


Hi Simon

Thank you for checking patch.

> I ran across a few minor problems after apply your series on top
> of the current linux/master -- "Merge tag 'for_linus-3.4-rc2' of
> git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/kgdb"
> (6c216ec636f75d834461be15f83ec41a6759bd2b).

Thank you.
I guess, it is because merge timing issue.
linus/master is v3.4-rc1, but rafael/master is v3.3-rc7 now.
These patches are based on rafael/master.

I post v2 patches again after merge

Best regards
---
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: Add backlight support
  2012-04-05  8:33 [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0 Kuninori Morimoto
  2012-04-05 21:41 ` Simon Horman
  2012-04-06  5:16 ` Kuninori Morimoto
@ 2012-06-15 15:17 ` Laurent Pinchart
  2012-06-18  2:11 ` Simon Horman
  3 siblings, 0 replies; 5+ messages in thread
From: Laurent Pinchart @ 2012-06-15 15:17 UTC (permalink / raw)
  To: linux-sh

The flat panel backlight on the Armadillo 800 EVA board is driven by the
TPU PWM output.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 arch/arm/mach-shmobile/board-armadillo800eva.c |   51 ++++++++++++++++++++++--
 1 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c
index 376e92d..22a4921 100644
--- a/arch/arm/mach-shmobile/board-armadillo800eva.c
+++ b/arch/arm/mach-shmobile/board-armadillo800eva.c
@@ -28,6 +28,7 @@
 #include <linux/platform_device.h>
 #include <linux/gpio.h>
 #include <linux/gpio_keys.h>
+#include <linux/pwm_backlight.h>
 #include <linux/sh_eth.h>
 #include <linux/videodev2.h>
 #include <linux/usb/renesas_usbhs.h>
@@ -35,6 +36,7 @@
 #include <linux/mmc/host.h>
 #include <linux/mmc/sh_mmcif.h>
 #include <linux/mmc/sh_mobile_sdhi.h>
+#include <linux/platform_data/rmob-tpu-pwm.h>
 #include <mach/common.h>
 #include <mach/irqs.h>
 #include <mach/r8a7740.h>
@@ -355,7 +357,49 @@ static struct platform_device sh_eth_device = {
 	.num_resources = ARRAY_SIZE(sh_eth_resources),
 };
 
-/* LCDC */
+/* PWM */
+static struct resource pwm_resources[] = {
+	[0] = {
+		.start = 0xe6600000,
+		.end = 0xe66000ff,
+		.flags = IORESOURCE_MEM,
+	},
+};
+
+static struct rmob_tpu_pwm_platform_data pwm_device_data = {
+	.channels[2] = {
+		.polarity = 0,
+		.pin_gpio = GPIO_PORT202,
+		.pin_gpio_fn = GPIO_FN_TPU0TO2_PORT202,
+	}
+};
+
+static struct platform_device pwm_device = {
+	.name = "rmob_tpu_pwm",
+	.id = 0,
+	.dev = {
+		.platform_data = &pwm_device_data,
+	},
+	.num_resources = ARRAY_SIZE(pwm_resources),
+	.resource = pwm_resources,
+};
+
+/* LCDC and backlight */
+static struct platform_pwm_backlight_data pwm_backlight_data = {
+	.pwm_id = 2,
+	.lth_brightness = 50,
+	.max_brightness = 255,
+	.dft_brightness = 255,
+	.pwm_period_ns = 33333, /* 30kHz */
+};
+
+static struct platform_device pwm_backlight_device = {
+	.name = "pwm-backlight",
+	.dev = {
+		.platform_data = &pwm_backlight_data,
+	},
+};
+
 static struct fb_videomode lcdc0_mode = {
 	.name		= "AMPIER/AM-800480",
 	.xres		= 800,
@@ -702,6 +746,8 @@ static struct platform_device gpio_keys_device = {
  */
 static struct platform_device *eva_devices[] __initdata = {
 	&lcdc0_device,
+	&pwm_device,
+	&pwm_backlight_device,
 	&gpio_keys_device,
 	&sh_eth_device,
 	&sdhi0_device,
@@ -800,9 +846,6 @@ static void __init eva_init(void)
 	gpio_request(GPIO_PORT61, NULL); /* LCDDON */
 	gpio_direction_output(GPIO_PORT61, 1);
 
-	gpio_request(GPIO_PORT202, NULL); /* LCD0_LED_CONT */
-	gpio_direction_output(GPIO_PORT202, 0);
-
 	/* Touchscreen */
 	gpio_request(GPIO_FN_IRQ10,	NULL); /* TP_INT */
 	gpio_request(GPIO_PORT166,	NULL); /* TP_RST_B */
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: Add backlight support
  2012-04-05  8:33 [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0 Kuninori Morimoto
                   ` (2 preceding siblings ...)
  2012-06-15 15:17 ` [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: Add backlight support Laurent Pinchart
@ 2012-06-18  2:11 ` Simon Horman
  3 siblings, 0 replies; 5+ messages in thread
From: Simon Horman @ 2012-06-18  2:11 UTC (permalink / raw)
  To: linux-sh

On Fri, Jun 15, 2012 at 05:17:04PM +0200, Laurent Pinchart wrote:
> The flat panel backlight on the Armadillo 800 EVA board is driven by the
> TPU PWM output.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Tested-by: Simon Horman <horms@verge.net.au>

> ---
>  arch/arm/mach-shmobile/board-armadillo800eva.c |   51 ++++++++++++++++++++++--
>  1 files changed, 47 insertions(+), 4 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-06-18  2:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-05  8:33 [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: add support LCDC0 Kuninori Morimoto
2012-04-05 21:41 ` Simon Horman
2012-04-06  5:16 ` Kuninori Morimoto
2012-06-15 15:17 ` [PATCH 3/6] ARM: mach-shmobile: armadillo800eva: Add backlight support Laurent Pinchart
2012-06-18  2:11 ` Simon Horman

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).