All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hugues FRUCHET <hugues.fruchet@st.com>
To: Sakari Ailus <sakari.ailus@iki.fi>,
	"H. Nikolaus Schaller" <hns@goldelico.com>
Cc: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>,
	Guennadi Liakhovetski <g.liakhovetski@gmx.de>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Alexandre TORGUE <alexandre.torgue@st.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	devicetree <devicetree@vger.kernel.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	"linux-media@vger.kernel.org" <linux-media@vger.kernel.org>,
	"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
	Yannick FERTRE <yannick.fertre@st.com>
Subject: Re: [PATCH v1 2/6] [media] ov9650: add device tree support
Date: Tue, 27 Jun 2017 10:14:46 +0000	[thread overview]
Message-ID: <00c5784a-8e13-be01-5c9e-4747aaa14ae5@st.com> (raw)
In-Reply-To: <20170627053642.GW12407@valkosipuli.retiisi.org.uk>



On 06/27/2017 07:36 AM, Sakari Ailus wrote:
> On Mon, Jun 26, 2017 at 07:46:34PM +0200, H. Nikolaus Schaller wrote:
>> Hi,
>>
>>> Am 26.06.2017 um 18:31 schrieb Sakari Ailus <sakari.ailus@iki.fi>:
>>>
>>> Hi Hugues,
>>>
>>> On Thu, Jun 22, 2017 at 05:05:38PM +0200, Hugues Fruchet wrote:
>>>> @@ -1545,15 +1577,22 @@ static int ov965x_remove(struct i2c_client *client)
>>>> }
>>>>
>>>> static const struct i2c_device_id ov965x_id[] = {
>>>> -	{ "OV9650", 0 },
>>>> -	{ "OV9652", 0 },
>>>> +	{ "OV9650", 0x9650 },
>>>> +	{ "OV9652", 0x9652 },
>>>
>>> This change does not appear to match with the patch description nor it the
>>> information is used. How about not changing it, unless there's a reason to?
>>> The same for the data field of the of_device_id array below.
>>
>> I think it could/should be used to check if the camera chip that is found
>> by reading the product-id and version registers does match what the device
>> tree expects and abort probing on a mismatch.
> 
> Makes sense. But it should be a separate patch, shouldn't it?
> 
> You could also put the id to the ops struct, and choose the ops struct that
> way. Entirely up to you.
> 

I'll suggest to skip the id check between DT compatible string and real 
device id read from sensor, this is not something I see in other drivers 
currently.
But I would suggest to keep in a separate patch the switch of device id 
names to lower case in order to align with other omnivision cameras and 
not introduce upper/lower case potential bugs in DT later on (as the one 
encountered by Nikolaus):

  [media] ov9650: switch i2c device id to lower case

  static const struct i2c_device_id ov965x_id[] = {
-	{ "OV9650", 0 },
-	{ "OV9652", 0 },
+	{ "ov9650", 0 },
+	{ "ov9652", 0 },


  [media] ov9650: add device tree support

+static const struct of_device_id ov965x_of_match[] = {
+	{ .compatible = "ovti,ov9650", },
+	{ .compatible = "ovti,ov9652", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ov965x_of_match);
+
  static struct i2c_driver ov965x_i2c_driver = {
  	.driver = {
  		.name	= DRIVER_NAME,
+		.of_match_table = of_match_ptr(ov965x_of_match),

WARNING: multiple messages have this Message-ID (diff)
From: Hugues FRUCHET <hugues.fruchet@st.com>
To: Sakari Ailus <sakari.ailus@iki.fi>,
	"H. Nikolaus Schaller" <hns@goldelico.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	devicetree <devicetree@vger.kernel.org>,
	Benjamin Gaignard <benjamin.gaignard@linaro.org>,
	Alexandre TORGUE <alexandre.torgue@st.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Hans Verkuil <hverkuil@xs4all.nl>,
	Rob Herring <robh+dt@kernel.org>,
	Maxime Coquelin <mcoquelin.stm32@gmail.com>,
	Yannick FERTRE <yannick.fertre@st.com>,
	Sylwester Nawrocki <sylvester.nawrocki@gmail.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Guennadi Liakhovetski <g.liakhovetski@gmx.de>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	"linux-media@vger.kernel.org" <linux-media@vger.kernel.org>
Subject: Re: [PATCH v1 2/6] [media] ov9650: add device tree support
Date: Tue, 27 Jun 2017 10:14:46 +0000	[thread overview]
Message-ID: <00c5784a-8e13-be01-5c9e-4747aaa14ae5@st.com> (raw)
In-Reply-To: <20170627053642.GW12407@valkosipuli.retiisi.org.uk>



On 06/27/2017 07:36 AM, Sakari Ailus wrote:
> On Mon, Jun 26, 2017 at 07:46:34PM +0200, H. Nikolaus Schaller wrote:
>> Hi,
>>
>>> Am 26.06.2017 um 18:31 schrieb Sakari Ailus <sakari.ailus@iki.fi>:
>>>
>>> Hi Hugues,
>>>
>>> On Thu, Jun 22, 2017 at 05:05:38PM +0200, Hugues Fruchet wrote:
>>>> @@ -1545,15 +1577,22 @@ static int ov965x_remove(struct i2c_client *client)
>>>> }
>>>>
>>>> static const struct i2c_device_id ov965x_id[] = {
>>>> -	{ "OV9650", 0 },
>>>> -	{ "OV9652", 0 },
>>>> +	{ "OV9650", 0x9650 },
>>>> +	{ "OV9652", 0x9652 },
>>>
>>> This change does not appear to match with the patch description nor it the
>>> information is used. How about not changing it, unless there's a reason to?
>>> The same for the data field of the of_device_id array below.
>>
>> I think it could/should be used to check if the camera chip that is found
>> by reading the product-id and version registers does match what the device
>> tree expects and abort probing on a mismatch.
> 
> Makes sense. But it should be a separate patch, shouldn't it?
> 
> You could also put the id to the ops struct, and choose the ops struct that
> way. Entirely up to you.
> 

I'll suggest to skip the id check between DT compatible string and real 
device id read from sensor, this is not something I see in other drivers 
currently.
But I would suggest to keep in a separate patch the switch of device id 
names to lower case in order to align with other omnivision cameras and 
not introduce upper/lower case potential bugs in DT later on (as the one 
encountered by Nikolaus):

  [media] ov9650: switch i2c device id to lower case

  static const struct i2c_device_id ov965x_id[] = {
-	{ "OV9650", 0 },
-	{ "OV9652", 0 },
+	{ "ov9650", 0 },
+	{ "ov9652", 0 },


  [media] ov9650: add device tree support

+static const struct of_device_id ov965x_of_match[] = {
+	{ .compatible = "ovti,ov9650", },
+	{ .compatible = "ovti,ov9652", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ov965x_of_match);
+
  static struct i2c_driver ov965x_i2c_driver = {
  	.driver = {
  		.name	= DRIVER_NAME,
+		.of_match_table = of_match_ptr(ov965x_of_match),

WARNING: multiple messages have this Message-ID (diff)
From: hugues.fruchet@st.com (Hugues FRUCHET)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v1 2/6] [media] ov9650: add device tree support
Date: Tue, 27 Jun 2017 10:14:46 +0000	[thread overview]
Message-ID: <00c5784a-8e13-be01-5c9e-4747aaa14ae5@st.com> (raw)
In-Reply-To: <20170627053642.GW12407@valkosipuli.retiisi.org.uk>



On 06/27/2017 07:36 AM, Sakari Ailus wrote:
> On Mon, Jun 26, 2017 at 07:46:34PM +0200, H. Nikolaus Schaller wrote:
>> Hi,
>>
>>> Am 26.06.2017 um 18:31 schrieb Sakari Ailus <sakari.ailus@iki.fi>:
>>>
>>> Hi Hugues,
>>>
>>> On Thu, Jun 22, 2017 at 05:05:38PM +0200, Hugues Fruchet wrote:
>>>> @@ -1545,15 +1577,22 @@ static int ov965x_remove(struct i2c_client *client)
>>>> }
>>>>
>>>> static const struct i2c_device_id ov965x_id[] = {
>>>> -	{ "OV9650", 0 },
>>>> -	{ "OV9652", 0 },
>>>> +	{ "OV9650", 0x9650 },
>>>> +	{ "OV9652", 0x9652 },
>>>
>>> This change does not appear to match with the patch description nor it the
>>> information is used. How about not changing it, unless there's a reason to?
>>> The same for the data field of the of_device_id array below.
>>
>> I think it could/should be used to check if the camera chip that is found
>> by reading the product-id and version registers does match what the device
>> tree expects and abort probing on a mismatch.
> 
> Makes sense. But it should be a separate patch, shouldn't it?
> 
> You could also put the id to the ops struct, and choose the ops struct that
> way. Entirely up to you.
> 

I'll suggest to skip the id check between DT compatible string and real 
device id read from sensor, this is not something I see in other drivers 
currently.
But I would suggest to keep in a separate patch the switch of device id 
names to lower case in order to align with other omnivision cameras and 
not introduce upper/lower case potential bugs in DT later on (as the one 
encountered by Nikolaus):

  [media] ov9650: switch i2c device id to lower case

  static const struct i2c_device_id ov965x_id[] = {
-	{ "OV9650", 0 },
-	{ "OV9652", 0 },
+	{ "ov9650", 0 },
+	{ "ov9652", 0 },


  [media] ov9650: add device tree support

+static const struct of_device_id ov965x_of_match[] = {
+	{ .compatible = "ovti,ov9650", },
+	{ .compatible = "ovti,ov9652", },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, ov965x_of_match);
+
  static struct i2c_driver ov965x_i2c_driver = {
  	.driver = {
  		.name	= DRIVER_NAME,
+		.of_match_table = of_match_ptr(ov965x_of_match),

  reply	other threads:[~2017-06-27 10:15 UTC|newest]

Thread overview: 190+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-22 15:05 [PATCH v1 0/6] Add support of OV9655 camera Hugues Fruchet
2017-06-22 15:05 ` Hugues Fruchet
2017-06-22 15:05 ` Hugues Fruchet
2017-06-22 15:05 ` [PATCH v1 1/6] DT bindings: add bindings for ov965x camera module Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-23 10:25   ` H. Nikolaus Schaller
2017-06-23 10:25     ` H. Nikolaus Schaller
2017-06-23 10:25     ` H. Nikolaus Schaller
2017-06-23 10:25     ` H. Nikolaus Schaller
2017-06-23 10:46     ` Andreas Färber
2017-06-23 10:46       ` Andreas Färber
2017-06-23 10:46       ` Andreas Färber
2017-06-23 10:46       ` Andreas Färber
2017-06-23 10:59       ` H. Nikolaus Schaller
2017-06-23 10:59         ` H. Nikolaus Schaller
2017-06-23 10:59         ` H. Nikolaus Schaller
2017-06-23 10:59         ` H. Nikolaus Schaller
2017-06-23 11:58         ` Laurent Pinchart
2017-06-23 11:58           ` Laurent Pinchart
2017-06-23 11:58           ` Laurent Pinchart
2017-06-23 14:53           ` H. Nikolaus Schaller
2017-06-23 14:53             ` H. Nikolaus Schaller
2017-06-23 14:53             ` H. Nikolaus Schaller
2017-06-23 14:53             ` H. Nikolaus Schaller
2017-06-23 14:57             ` Andreas Färber
2017-06-23 14:57               ` Andreas Färber
2017-06-23 14:57               ` Andreas Färber
2017-06-23 14:57               ` Andreas Färber
2017-06-23 15:22               ` H. Nikolaus Schaller
2017-06-23 15:22                 ` H. Nikolaus Schaller
2017-06-23 15:22                 ` H. Nikolaus Schaller
2017-06-23 15:22                 ` H. Nikolaus Schaller
2017-06-23 18:05                 ` Suman Anna
2017-06-23 18:05                   ` Suman Anna
2017-06-23 18:05                   ` Suman Anna
2017-06-23 18:05                   ` Suman Anna
2017-06-23 18:59                   ` H. Nikolaus Schaller
2017-06-23 18:59                     ` H. Nikolaus Schaller
2017-06-23 18:59                     ` H. Nikolaus Schaller
2017-06-23 18:59                     ` H. Nikolaus Schaller
2017-06-23 22:24                     ` Suman Anna
2017-06-23 22:24                       ` Suman Anna
2017-06-23 22:24                       ` Suman Anna
2017-06-23 22:24                       ` Suman Anna
2017-06-26  6:00                       ` H. Nikolaus Schaller
2017-06-26  6:00                         ` H. Nikolaus Schaller
2017-06-26  6:00                         ` H. Nikolaus Schaller
2017-06-26  6:00                         ` H. Nikolaus Schaller
2017-06-26 10:35     ` Hugues FRUCHET
2017-06-26 10:35       ` Hugues FRUCHET
2017-06-26 10:35       ` Hugues FRUCHET
2017-06-26 10:35       ` Hugues FRUCHET
2017-06-26 20:04       ` Sylwester Nawrocki
2017-06-26 20:04         ` Sylwester Nawrocki
2017-06-26 20:04         ` Sylwester Nawrocki
2017-06-26 20:04         ` Sylwester Nawrocki
2017-06-27  5:48         ` H. Nikolaus Schaller
2017-06-27  5:48           ` H. Nikolaus Schaller
2017-06-27  5:48           ` H. Nikolaus Schaller
2017-06-27 22:57           ` Sylwester Nawrocki
2017-06-27 22:57             ` Sylwester Nawrocki
2017-06-27 22:57             ` Sylwester Nawrocki
2017-06-27 22:57             ` Sylwester Nawrocki
2017-06-28  9:12             ` H. Nikolaus Schaller
2017-06-28  9:12               ` H. Nikolaus Schaller
2017-06-28  9:12               ` H. Nikolaus Schaller
2017-06-28  9:12               ` H. Nikolaus Schaller
2017-06-28 10:50               ` Sylwester Nawrocki
2017-06-28 10:50                 ` Sylwester Nawrocki
2017-06-28 10:50                 ` Sylwester Nawrocki
2017-06-28 10:50                 ` Sylwester Nawrocki
2017-06-28 11:24                 ` H. Nikolaus Schaller
2017-06-28 11:24                   ` H. Nikolaus Schaller
2017-06-28 11:24                   ` H. Nikolaus Schaller
2017-06-28 11:24                   ` H. Nikolaus Schaller
2017-06-28 12:28                   ` Hugues FRUCHET
2017-06-28 12:28                     ` Hugues FRUCHET
2017-06-28 12:28                     ` Hugues FRUCHET
2017-06-26 18:56     ` Rob Herring
2017-06-26 18:56       ` Rob Herring
2017-06-26 18:56       ` Rob Herring
2017-06-26 18:56       ` Rob Herring
2017-06-26 18:54   ` Rob Herring
2017-06-26 18:54     ` Rob Herring
2017-06-26 18:54     ` Rob Herring
2017-06-22 15:05 ` [PATCH v1 2/6] [media] ov9650: add device tree support Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-26 16:31   ` Sakari Ailus
2017-06-26 16:31     ` Sakari Ailus
2017-06-26 17:46     ` H. Nikolaus Schaller
2017-06-26 17:46       ` H. Nikolaus Schaller
2017-06-26 17:46       ` H. Nikolaus Schaller
2017-06-27  5:36       ` Sakari Ailus
2017-06-27  5:36         ` Sakari Ailus
2017-06-27  5:36         ` Sakari Ailus
2017-06-27 10:14         ` Hugues FRUCHET [this message]
2017-06-27 10:14           ` Hugues FRUCHET
2017-06-27 10:14           ` Hugues FRUCHET
2017-06-22 15:05 ` [PATCH v1 3/6] [media] ov9650: select the nearest higher resolution Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05 ` [PATCH v1 4/6] [media] ov9650: use write_array() for resolution sequences Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-26 16:33   ` Sakari Ailus
2017-06-26 16:33     ` Sakari Ailus
2017-06-26 16:33     ` Sakari Ailus
2017-06-29 13:59     ` Hugues FRUCHET
2017-06-29 13:59       ` Hugues FRUCHET
2017-06-29 13:59       ` Hugues FRUCHET
2017-06-29 13:59       ` Hugues FRUCHET
2017-06-22 15:05 ` [PATCH v1 5/6] [media] ov9650: add multiple variant support Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-25 12:36   ` kbuild test robot
2017-06-25 12:36     ` kbuild test robot
2017-06-25 12:36     ` kbuild test robot
2017-06-22 15:05 ` [PATCH v1 6/6] [media] ov9650: add support of OV9655 variant Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-22 15:05   ` Hugues Fruchet
2017-06-25 16:07   ` [PATCH] ov9650: fix semicolon.cocci warnings kbuild test robot
2017-06-25 16:07     ` kbuild test robot
2017-06-25 16:07     ` kbuild test robot
2017-06-25 16:07   ` [PATCH v1 6/6] [media] ov9650: add support of OV9655 variant kbuild test robot
2017-06-25 16:07     ` kbuild test robot
2017-06-25 16:07     ` kbuild test robot
2017-06-26  6:03   ` H. Nikolaus Schaller
2017-06-26  6:03     ` H. Nikolaus Schaller
2017-06-26  6:03     ` H. Nikolaus Schaller
2017-06-26 11:49     ` Hugues FRUCHET
2017-06-26 11:49       ` Hugues FRUCHET
2017-06-26 11:49       ` Hugues FRUCHET
2017-06-26 11:49       ` Hugues FRUCHET
2017-06-22 15:41 ` [PATCH v1 0/6] Add support of OV9655 camera H. Nikolaus Schaller
2017-06-22 15:41   ` H. Nikolaus Schaller
2017-06-22 15:41   ` H. Nikolaus Schaller
2017-06-22 15:41   ` H. Nikolaus Schaller
2017-06-23 10:25   ` H. Nikolaus Schaller
2017-06-23 10:25     ` H. Nikolaus Schaller
2017-06-23 10:25     ` H. Nikolaus Schaller
2017-06-23 10:25     ` H. Nikolaus Schaller
2017-06-25  9:18     ` omap3isp camera was " Pavel Machek
2017-06-25  9:18       ` Pavel Machek
2017-06-25  9:18       ` Pavel Machek
2017-06-26  6:05       ` H. Nikolaus Schaller
2017-06-26  6:05         ` H. Nikolaus Schaller
2017-06-26  6:05         ` H. Nikolaus Schaller
2017-06-26  6:05         ` H. Nikolaus Schaller
2017-06-26  8:39         ` Pavel Machek
2017-06-26  8:39           ` Pavel Machek
2017-06-26  8:39           ` Pavel Machek
2017-06-26  8:39           ` Pavel Machek
2017-06-26  9:53           ` H. Nikolaus Schaller
2017-06-26  9:53             ` H. Nikolaus Schaller
2017-06-26  9:53             ` H. Nikolaus Schaller
2017-06-26  9:53             ` H. Nikolaus Schaller
2017-06-26 11:16             ` Pavel Machek
2017-06-26 11:16               ` Pavel Machek
2017-06-26 11:16               ` Pavel Machek
2017-06-26 11:16               ` Pavel Machek
2017-06-27  5:49               ` H. Nikolaus Schaller
2017-06-27  5:49                 ` H. Nikolaus Schaller
2017-06-27  5:49                 ` H. Nikolaus Schaller
2017-06-27  5:49                 ` H. Nikolaus Schaller
2017-06-26 13:19           ` Hugues FRUCHET
2017-06-26 13:19             ` Hugues FRUCHET
2017-06-26 13:19             ` Hugues FRUCHET
2017-06-26 16:28             ` H. Nikolaus Schaller
2017-06-26 16:28               ` H. Nikolaus Schaller
2017-06-27  7:57               ` Hugues FRUCHET
2017-06-27  7:57                 ` Hugues FRUCHET
2017-06-27  7:57                 ` Hugues FRUCHET
2017-06-27  7:57                 ` Hugues FRUCHET
     [not found]                 ` <95B10899-9966-4844-9667-D2434968A492@goldelico.com>
     [not found]                   ` <85e62c47-e319-c801-376c-95f4d9cbf75a@st.com>
     [not found]                     ` <E183E921-B8F4-4F8A-A302-58297A874990@goldelico.com>
     [not found]                       ` <77bd3b8fe52643d68ecc821ec22bc0e6@SFHDAG5NODE1.st.com>
2017-07-01 21:00                         ` H. Nikolaus Schaller
2017-07-03  8:16                           ` Hugues FRUCHET
2017-07-03  9:14                             ` H. Nikolaus Schaller
2017-07-03 12:03                               ` Hugues FRUCHET
2017-07-03 12:23                                 ` H. Nikolaus Schaller
2017-07-05 14:02                                   ` H. Nikolaus Schaller
2017-07-08 20:55                                     ` Sakari Ailus
2017-06-26  6:02     ` H. Nikolaus Schaller
2017-06-26  6:02       ` H. Nikolaus Schaller
2017-06-26  6:02       ` H. Nikolaus Schaller
2017-06-26  6:02       ` H. Nikolaus Schaller
2017-06-26 10:05   ` Hugues FRUCHET
2017-06-26 10:05     ` Hugues FRUCHET
2017-06-26 10:05     ` Hugues FRUCHET
2017-06-26 10:05     ` Hugues FRUCHET

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=00c5784a-8e13-be01-5c9e-4747aaa14ae5@st.com \
    --to=hugues.fruchet@st.com \
    --cc=alexandre.torgue@st.com \
    --cc=benjamin.gaignard@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=g.liakhovetski@gmx.de \
    --cc=hns@goldelico.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mchehab@kernel.org \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=sakari.ailus@iki.fi \
    --cc=sylvester.nawrocki@gmail.com \
    --cc=yannick.fertre@st.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.