diff mbox

media/i2c: ths8200: fix build failure with gcc 4.5.4

Message ID 20131013101333.GA25034@n2100.arm.linux.org.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Russell King - ARM Linux Oct. 13, 2013, 10:13 a.m. UTC
v3.12-rc fails to build with this error:

drivers/media/i2c/ths8200.c:49:2: error: unknown field 'bt' specified in initializer
drivers/media/i2c/ths8200.c:50:3: error: field name not in record or union initializer
drivers/media/i2c/ths8200.c:50:3: error: (near initialization for 'ths8200_timings_cap.reserved')
drivers/media/i2c/ths8200.c:51:3: error: field name not in record or union initializer
drivers/media/i2c/ths8200.c:51:3: error: (near initialization for 'ths8200_timings_cap.reserved')
...

with gcc 4.5.4.  This error was not detected in builds prior to v3.12-rc.
This patch fixes this.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
 drivers/media/i2c/ths8200.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Gianluca Gennari Oct. 13, 2013, 10:36 a.m. UTC | #1
Il 13/10/2013 12:13, Russell King - ARM Linux ha scritto:
> v3.12-rc fails to build with this error:
> 
> drivers/media/i2c/ths8200.c:49:2: error: unknown field 'bt' specified in initializer
> drivers/media/i2c/ths8200.c:50:3: error: field name not in record or union initializer
> drivers/media/i2c/ths8200.c:50:3: error: (near initialization for 'ths8200_timings_cap.reserved')
> drivers/media/i2c/ths8200.c:51:3: error: field name not in record or union initializer
> drivers/media/i2c/ths8200.c:51:3: error: (near initialization for 'ths8200_timings_cap.reserved')
> ...
> 
> with gcc 4.5.4.  This error was not detected in builds prior to v3.12-rc.
> This patch fixes this.

Hi Russel,
this error is already fixed by this patch:

https://patchwork.linuxtv.org/patch/20002/

that has been already accepted and is queued for kernel 3.12.

Regards,
Gianluca

> 
> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
> ---
>  drivers/media/i2c/ths8200.c |   18 +++++++++++-------
>  1 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/media/i2c/ths8200.c b/drivers/media/i2c/ths8200.c
> index a58a8f6..5ae2a4f 100644
> --- a/drivers/media/i2c/ths8200.c
> +++ b/drivers/media/i2c/ths8200.c
> @@ -46,13 +46,17 @@ struct ths8200_state {
>  
>  static const struct v4l2_dv_timings_cap ths8200_timings_cap = {
>  	.type = V4L2_DV_BT_656_1120,
> -	.bt = {
> -		.max_width = 1920,
> -		.max_height = 1080,
> -		.min_pixelclock = 25000000,
> -		.max_pixelclock = 148500000,
> -		.standards = V4L2_DV_BT_STD_CEA861,
> -		.capabilities = V4L2_DV_BT_CAP_PROGRESSIVE,
> +	/* Allow gcc 4.5.4 to build this */
> +	.reserved = { },
> +	{
> +		.bt = {
> +			.max_width = 1920,
> +			.max_height = 1080,
> +			.min_pixelclock = 25000000,
> +			.max_pixelclock = 148500000,
> +			.standards = V4L2_DV_BT_STD_CEA861,
> +			.capabilities = V4L2_DV_BT_CAP_PROGRESSIVE,
> +		},
>  	},
>  };
>  
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Russell King - ARM Linux Oct. 13, 2013, 11:16 a.m. UTC | #2
On Sun, Oct 13, 2013 at 12:36:07PM +0200, Gianluca Gennari wrote:
> Il 13/10/2013 12:13, Russell King - ARM Linux ha scritto:
> > v3.12-rc fails to build with this error:
> > 
> > drivers/media/i2c/ths8200.c:49:2: error: unknown field 'bt' specified in initializer
> > drivers/media/i2c/ths8200.c:50:3: error: field name not in record or union initializer
> > drivers/media/i2c/ths8200.c:50:3: error: (near initialization for 'ths8200_timings_cap.reserved')
> > drivers/media/i2c/ths8200.c:51:3: error: field name not in record or union initializer
> > drivers/media/i2c/ths8200.c:51:3: error: (near initialization for 'ths8200_timings_cap.reserved')
> > ...
> > 
> > with gcc 4.5.4.  This error was not detected in builds prior to v3.12-rc.
> > This patch fixes this.
> 
> Hi Russel,
> this error is already fixed by this patch:
> 
> https://patchwork.linuxtv.org/patch/20002/
> 
> that has been already accepted and is queued for kernel 3.12.

It would be a good idea to have the comment updated - given that gcc 4.5.4
also has a problem, it's not only a problem for gcc < 4.4.6 as that patch
claims.
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Gianluca Gennari Oct. 13, 2013, 12:55 p.m. UTC | #3
Il 13/10/2013 13:16, Russell King - ARM Linux ha scritto:
> On Sun, Oct 13, 2013 at 12:36:07PM +0200, Gianluca Gennari wrote:
>> Il 13/10/2013 12:13, Russell King - ARM Linux ha scritto:
>>> v3.12-rc fails to build with this error:
>>>
>>> drivers/media/i2c/ths8200.c:49:2: error: unknown field 'bt' specified in initializer
>>> drivers/media/i2c/ths8200.c:50:3: error: field name not in record or union initializer
>>> drivers/media/i2c/ths8200.c:50:3: error: (near initialization for 'ths8200_timings_cap.reserved')
>>> drivers/media/i2c/ths8200.c:51:3: error: field name not in record or union initializer
>>> drivers/media/i2c/ths8200.c:51:3: error: (near initialization for 'ths8200_timings_cap.reserved')
>>> ...
>>>
>>> with gcc 4.5.4.  This error was not detected in builds prior to v3.12-rc.
>>> This patch fixes this.
>>
>> Hi Russel,
>> this error is already fixed by this patch:
>>
>> https://patchwork.linuxtv.org/patch/20002/
>>
>> that has been already accepted and is queued for kernel 3.12.
> 
> It would be a good idea to have the comment updated - given that gcc 4.5.4
> also has a problem, it's not only a problem for gcc < 4.4.6 as that patch
> claims.
> 

Yep, the fact is that there are 2 different compatibility problems:
- gcc < 4.4.6 requires additional curly brackets to initialize anonymous
structs (see v4l2-dv-timings.h);
- some gcc version requires that structure members are initialized in
the same order they are defined, even if you specify the member name;

The second issue is the one you are facing, but I don't know how to
track it down to a specific gcc version. If you can get the exact
version number and provide a patch, you're welcome!

Regards,
Gianluca
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Russell King - ARM Linux Oct. 13, 2013, 12:58 p.m. UTC | #4
On Sun, Oct 13, 2013 at 02:55:49PM +0200, Gianluca Gennari wrote:
> Il 13/10/2013 13:16, Russell King - ARM Linux ha scritto:
> > On Sun, Oct 13, 2013 at 12:36:07PM +0200, Gianluca Gennari wrote:
> >> Il 13/10/2013 12:13, Russell King - ARM Linux ha scritto:
> >>> v3.12-rc fails to build with this error:
> >>>
> >>> drivers/media/i2c/ths8200.c:49:2: error: unknown field 'bt' specified in initializer
> >>> drivers/media/i2c/ths8200.c:50:3: error: field name not in record or union initializer
> >>> drivers/media/i2c/ths8200.c:50:3: error: (near initialization for 'ths8200_timings_cap.reserved')
> >>> drivers/media/i2c/ths8200.c:51:3: error: field name not in record or union initializer
> >>> drivers/media/i2c/ths8200.c:51:3: error: (near initialization for 'ths8200_timings_cap.reserved')
> >>> ...
> >>>
> >>> with gcc 4.5.4.  This error was not detected in builds prior to v3.12-rc.
> >>> This patch fixes this.
> >>
> >> Hi Russel,
> >> this error is already fixed by this patch:
> >>
> >> https://patchwork.linuxtv.org/patch/20002/
> >>
> >> that has been already accepted and is queued for kernel 3.12.
> > 
> > It would be a good idea to have the comment updated - given that gcc 4.5.4
> > also has a problem, it's not only a problem for gcc < 4.4.6 as that patch
> > claims.
> > 
> 
> Yep, the fact is that there are 2 different compatibility problems:
> - gcc < 4.4.6 requires additional curly brackets to initialize anonymous
> structs (see v4l2-dv-timings.h);

gcc 4.5.4 also requires that - merely adding the initializer for
.reserved doesn't fix it on this gcc version (it continues to
complain about "unknown field 'bt'").

> - some gcc version requires that structure members are initialized in
> the same order they are defined, even if you specify the member name;
> 
> The second issue is the one you are facing, but I don't know how to
> track it down to a specific gcc version. If you can get the exact
> version number and provide a patch, you're welcome!

The exact version number is gcc 4.5.4.  It's the released 4.5.4 version
built straight from the FSF's gcc-core-4.5.4.tar.bz2.
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/media/i2c/ths8200.c b/drivers/media/i2c/ths8200.c
index a58a8f6..5ae2a4f 100644
--- a/drivers/media/i2c/ths8200.c
+++ b/drivers/media/i2c/ths8200.c
@@ -46,13 +46,17 @@  struct ths8200_state {
 
 static const struct v4l2_dv_timings_cap ths8200_timings_cap = {
 	.type = V4L2_DV_BT_656_1120,
-	.bt = {
-		.max_width = 1920,
-		.max_height = 1080,
-		.min_pixelclock = 25000000,
-		.max_pixelclock = 148500000,
-		.standards = V4L2_DV_BT_STD_CEA861,
-		.capabilities = V4L2_DV_BT_CAP_PROGRESSIVE,
+	/* Allow gcc 4.5.4 to build this */
+	.reserved = { },
+	{
+		.bt = {
+			.max_width = 1920,
+			.max_height = 1080,
+			.min_pixelclock = 25000000,
+			.max_pixelclock = 148500000,
+			.standards = V4L2_DV_BT_STD_CEA861,
+			.capabilities = V4L2_DV_BT_CAP_PROGRESSIVE,
+		},
 	},
 };