ARM: pxa: ssp: provide platform_device_id for PXA3xx
Subsystems (3)
PATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
Provide an explicit match string for PXA3xx SSP ports.
--- arch/arm/plat-pxa/ssp.c | 1 + 1 file changed, 1 insertion(+)
arch/arm/plat-pxa/ssp.c +1 -0
@@ -258,6 +258,7 @@ static const struct platform_device_id ssp_id_table[] = { { "pxa25x-ssp", PXA25x_SSP }, { "pxa25x-nssp", PXA25x_NSSP }, { "pxa27x-ssp", PXA27x_SSP }, + { "pxa3xx-ssp", PXA3xx_SSP }, { "pxa168-ssp", PXA168_SSP }, { "pxa910-ssp", PXA910_SSP }, { },
Signature · 1 line
2.0.4
PATCH 2/2 ARM: pxa3xx: provide specific platform_devices for all ssp ports
Currently, devices for SSP ports 1, 2 and 3 are registered as compatible devices to pxa27x-ssp. While the actual IP core is comparable, there are some subtle differences which users of the SSP ports address by looking at the 'type' field.
By registering devices of type 'pxa27x-ssp', this 'type' field is incorrectly set to PXA27x_SSP which confuses the users.
To fix this, provide specific ssp port plaform devices which use 'pxa3xx-ssp' as driver name, an instantiate them from pxa3xx.c.
--- arch/arm/mach-pxa/devices.c | 42 ++++++++++++++++++++++++++++++++++++++++-- arch/arm/mach-pxa/devices.h | 3 +++ arch/arm/mach-pxa/pxa3xx.c | 14 +++++++------- 3 files changed, 50 insertions(+), 9 deletions(-)
arch/arm/mach-pxa/devices.c +40 -2
@@ -1099,9 +1099,47 @@ static struct resource pxa3xx_resource_ssp4[] = { }, }; +/* +* PXA3xx SSP is basically equivalent to PXA27x. +* However, we need to register the device by the correct name in order to +* make the driver set the correct internal type, hence we provide specific +* platform_devices for each of them. +*/ +struct platform_device pxa3xx_device_ssp1 = { + .name ="pxa3xx-ssp" , + .id =0 , + .dev = { + .dma_mask = &pxa27x_ssp1_dma_mask, + .coherent_dma_mask =DMA_BIT_MASK (32 ), + }, + .resource = pxa27x_resource_ssp1, + .num_resources =ARRAY_SIZE (pxa27x_resource_ssp1), +}; + +struct platform_device pxa3xx_device_ssp2 = { + .name ="pxa3xx-ssp" , + .id =1 , + .dev = { + .dma_mask = &pxa27x_ssp2_dma_mask, + .coherent_dma_mask =DMA_BIT_MASK (32 ), + }, + .resource = pxa27x_resource_ssp2, + .num_resources =ARRAY_SIZE (pxa27x_resource_ssp2), +}; + +struct platform_device pxa3xx_device_ssp3 = { + .name ="pxa3xx-ssp" , + .id =2 , + .dev = { + .dma_mask = &pxa27x_ssp3_dma_mask, + .coherent_dma_mask =DMA_BIT_MASK (32 ), + }, + .resource = pxa27x_resource_ssp3, + .num_resources =ARRAY_SIZE (pxa27x_resource_ssp3), +}; +struct platform_device pxa3xx_device_ssp4 = { -/* PXA3xx SSP is basically equivalent to PXA27x */ - .name ="pxa27x-ssp" , + .name ="pxa3xx-ssp" , .id =3 , .dev = { .dma_mask = &pxa3xx_ssp4_dma_mask,
arch/arm/mach-pxa/devices.h +3 -0
@@ -28,6 +28,9 @@ extern struct platform_device pxa25x_device_assp;extern struct platform_device pxa27x_device_ssp1;extern struct platform_device pxa27x_device_ssp2;extern struct platform_device pxa27x_device_ssp3; +extern struct platform_device pxa3xx_device_ssp1; +extern struct platform_device pxa3xx_device_ssp2; +extern struct platform_device pxa3xx_device_ssp3;extern struct platform_device pxa3xx_device_ssp4;extern struct platform_device pxa25x_device_pwm0;
arch/arm/mach-pxa/pxa3xx.c +7 -7
@@ -84,10 +84,10 @@ static struct clk_lookup pxa3xx_clkregs[] = {INIT_CLKREG (&clk_pxa3xx_usbh,"pxa27x-ohci" ,NULL ),INIT_CLKREG (&clk_pxa3xx_u2d,"pxa3xx-u2d" ,NULL ),INIT_CLKREG (&clk_pxa3xx_keypad,"pxa27x-keypad" ,NULL ), -INIT_CLKREG (&clk_pxa3xx_ssp1,"pxa27x-ssp.0" ,NULL ), -INIT_CLKREG (&clk_pxa3xx_ssp2,"pxa27x-ssp.1" ,NULL ), -INIT_CLKREG (&clk_pxa3xx_ssp3,"pxa27x-ssp.2" ,NULL ), -INIT_CLKREG (&clk_pxa3xx_ssp4,"pxa27x-ssp.3" ,NULL ), +INIT_CLKREG (&clk_pxa3xx_ssp1,"pxa3xx-ssp.0" ,NULL ), +INIT_CLKREG (&clk_pxa3xx_ssp2,"pxa3xx-ssp.1" ,NULL ), +INIT_CLKREG (&clk_pxa3xx_ssp3,"pxa3xx-ssp.2" ,NULL ), +INIT_CLKREG (&clk_pxa3xx_ssp4,"pxa3xx-ssp.3" ,NULL ),INIT_CLKREG (&clk_pxa3xx_pwm0,"pxa27x-pwm.0" ,NULL ),INIT_CLKREG (&clk_pxa3xx_pwm1,"pxa27x-pwm.1" ,NULL ), INIT_CLKREG(&clk_pxa3xx_mmc1, "pxa2xx-mci.0", NULL),
@@ -456,9 +456,9 @@ static struct platform_device *devices[] __initdata = { &pxa_device_asoc_platform, &sa1100_device_rtc, &pxa_device_rtc, - &pxa27x_device_ssp1, - &pxa27x_device_ssp2, - &pxa27x_device_ssp3, + &pxa3xx_device_ssp1, + &pxa3xx_device_ssp2, + &pxa3xx_device_ssp3, &pxa3xx_device_ssp4, &pxa27x_device_pwm0, &pxa27x_device_pwm1,
Signature · 1 line
2.0.4
Haojian Zhuang
maintainerPATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
In reply to Daniel MackQuoted 20 lines · Daniel Mack
Provide an explicit match string for PXA3xx SSP ports.
Signed-off-by Daniel Mack <[email protected]>--- arch/arm/plat-pxa/ssp.c | 1 + 1 file changed, 1 insertion(+)arch/arm/plat-pxa/ssp.c +1
-1@@ -258,6 +258,7 @@ static const struct platform_device_id ssp_id_table[] = { { "pxa25x-ssp", PXA25x_SSP }, { "pxa25x-nssp", PXA25x_NSSP }, { "pxa27x-ssp", PXA27x_SSP }, + { "pxa3xx-ssp", PXA3xx_SSP }, { "pxa168-ssp", PXA168_SSP }, { "pxa910-ssp", PXA910_SSP }, { }, --
Quoted 2 lines
2.0.4
I don't agree on this. SSP1,SSP2,SSP3 on pxa3xx are same with pxa27x. So we reuse the name.
For the new SSP4, we create pxa3xx_device_ssp4.
We just want to reuse these code.
Regards
Haojian
PATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
Hi Haojian,
Quoted 17 lines · Haojian Zhuang
Quoted 16 lines · Daniel Mack
Provide an explicit match string for PXA3xx SSP ports.
Signed-off-by Daniel Mack <[email protected]>--- arch/arm/plat-pxa/ssp.c | 1 + 1 file changed, 1 insertion(+)arch/arm/plat-pxa/ssp.c +1
-0@@ -258,6 +258,7 @@ static const struct platform_device_id ssp_id_table[] = { { "pxa25x-ssp", PXA25x_SSP }, { "pxa25x-nssp", PXA25x_NSSP }, { "pxa27x-ssp", PXA27x_SSP }, + { "pxa3xx-ssp", PXA3xx_SSP },
Quoted 8 lines
arch/arm/plat-pxa/ssp.c static const struct platform_device_id ssp_id_table[] = {
Quoted 4 lines
arch/arm/plat-pxa/ssp.c +0
-1{ "pxa168-ssp", PXA168_SSP }, { "pxa910-ssp", PXA910_SSP }, { }, --I don't agree on this. SSP1,SSP2,SSP3 on pxa3xx are same with pxa27x. So we reuse the name.
For the new SSP4, we createpxa3xx_device_ssp4.
Well, the problem is that the code in sound/soc/pxa/pxa-ssp.c is full of checks like "ssp->type == PXA3xx_SSP", but unless the devices are instantiated via DT, this value is never set appropriately, not even for ssp4.
That's a regression caused by 972a55b62 ("ASoC: fix pxa-ssp compiling issue under mach-mmp"), btw, that added the PXA3xx_SSP enum value but forgot to make sure it is actually used.
Hence, this commit could even get a stable tag for 3.5+.
Thanks,
Daniel
Haojian Zhuang
maintainerPATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
Quoted 34 lines · Daniel Mack
Hi Haojian,
Quoted 17 lines · Haojian Zhuang
Quoted 16 lines · Daniel Mack
Provide an explicit match string for PXA3xx SSP ports.
Signed-off-by Daniel Mack <[email protected]>--- arch/arm/plat-pxa/ssp.c | 1 + 1 file changed, 1 insertion(+)arch/arm/plat-pxa/ssp.c +1
-0@@ -258,6 +258,7 @@ static const struct platform_device_id ssp_id_table[] = { { "pxa25x-ssp", PXA25x_SSP }, { "pxa25x-nssp", PXA25x_NSSP }, { "pxa27x-ssp", PXA27x_SSP }, + { "pxa3xx-ssp", PXA3xx_SSP },Quoted 8 lines
arch/arm/plat-pxa/ssp.c static const struct platform_device_id ssp_id_table[] = {
Quoted 4 lines
arch/arm/plat-pxa/ssp.c +0
-1{ "pxa168-ssp", PXA168_SSP }, { "pxa910-ssp", PXA910_SSP }, { }, --I don't agree on this. SSP1,SSP2,SSP3 on pxa3xx are same with pxa27x. So we reuse the name.
For the new SSP4, we createpxa3xx_device_ssp4.Well, the problem is that the code in
sound/soc/pxa/pxa-ssp.cis full of checks like "ssp->type==PXA3xx_SSP", but unless the devices are instantiated via DT, this value is never set appropriately, not even for ssp4.
Quoted 7 lines
That's a regression caused by
972a55b62("ASoC: fix pxa-ssp compiling issue under mach-mmp"), btw, that added thePXA3xx_SSPenum value but forgot to make sure it is actually used.Hence, this commit could even get a stable tag for 3.5+.
Yes, you're right. We should append this string.
PATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
Quoted 10 lines · Haojian Zhuang
Quoted 7 lines · Daniel Mack
That's a regression caused by
972a55b62("ASoC: fix pxa-ssp compiling issue under mach-mmp"), btw, that added thePXA3xx_SSPenum value but forgot to make sure it is actually used.Hence, this commit could even get a stable tag for 3.5+.
Yes, you're right. We should append this string.
The stable@ tag you mean? Well, OTOH, it went unnoticed since 3.5, so we can as well just apply it for 3.17 :)
Thanks,
Daniel
PATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
In reply to Haojian ZhuangQuoted 35 lines · Haojian Zhuang
Quoted 34 lines · Daniel Mack
Hi Haojian,
Quoted 17 lines · Haojian Zhuang
Quoted 16 lines · Daniel Mack
Provide an explicit match string for PXA3xx SSP ports.
Signed-off-by Daniel Mack <[email protected]>--- arch/arm/plat-pxa/ssp.c | 1 + 1 file changed, 1 insertion(+)arch/arm/plat-pxa/ssp.c +1
-0@@ -258,6 +258,7 @@ static const struct platform_device_id ssp_id_table[] = { { "pxa25x-ssp", PXA25x_SSP }, { "pxa25x-nssp", PXA25x_NSSP }, { "pxa27x-ssp", PXA27x_SSP }, + { "pxa3xx-ssp", PXA3xx_SSP },Quoted 8 lines
arch/arm/plat-pxa/ssp.c static const struct platform_device_id ssp_id_table[] = {
Quoted 4 lines
arch/arm/plat-pxa/ssp.c +0
-1{ "pxa168-ssp", PXA168_SSP }, { "pxa910-ssp", PXA910_SSP }, { }, --I don't agree on this. SSP1,SSP2,SSP3 on pxa3xx are same with pxa27x. So we reuse the name.
For the new SSP4, we createpxa3xx_device_ssp4.Well, the problem is that the code in
sound/soc/pxa/pxa-ssp.cis full of checks like "ssp->type==PXA3xx_SSP", but unless the devices are instantiated via DT, this value is never set appropriately, not even for ssp4.
Quoted 8 lines
Quoted 7 lines
That's a regression caused by
972a55b62("ASoC: fix pxa-ssp compiling issue under mach-mmp"), btw, that added thePXA3xx_SSPenum value but forgot to make sure it is actually used.Hence, this commit could even get a stable tag for 3.5+.
Yes, you're right. We should append this string.
Would this go through your tree or will Arnd or Eric pick those patches?
Thanks,
Daniel
Haojian Zhuang
maintainerPATCH 1/2 ARM: pxa: ssp: provide platform_device_id for PXA3xx
Quoted 43 lines · Daniel Mack
Quoted 42 lines · Haojian Zhuang
Quoted 41 lines · Daniel Mack
Hi Haojian,
Quoted 17 lines · Haojian Zhuang
Quoted 16 lines · Daniel Mack
Provide an explicit match string for PXA3xx SSP ports.
Signed-off-by Daniel Mack <[email protected]>--- arch/arm/plat-pxa/ssp.c | 1 + 1 file changed, 1 insertion(+)arch/arm/plat-pxa/ssp.c +1
-0@@ -258,6 +258,7 @@ static const struct platform_device_id ssp_id_table[] = { { "pxa25x-ssp", PXA25x_SSP }, { "pxa25x-nssp", PXA25x_NSSP }, { "pxa27x-ssp", PXA27x_SSP }, + { "pxa3xx-ssp", PXA3xx_SSP },Quoted 8 lines
arch/arm/plat-pxa/ssp.c static const struct platform_device_id ssp_id_table[] = {
Quoted 4 lines
arch/arm/plat-pxa/ssp.c +0
-1{ "pxa168-ssp", PXA168_SSP }, { "pxa910-ssp", PXA910_SSP }, { }, --I don't agree on this. SSP1,SSP2,SSP3 on pxa3xx are same with pxa27x. So we reuse the name.
For the new SSP4, we createpxa3xx_device_ssp4.Well, the problem is that the code in
sound/soc/pxa/pxa-ssp.cis full of checks like "ssp->type==PXA3xx_SSP", but unless the devices are instantiated via DT, this value is never set appropriately, not even for ssp4.That's a regression caused by
972a55b62("ASoC: fix pxa-ssp compiling issue under mach-mmp"), btw, that added thePXA3xx_SSPenum value but forgot to make sure it is actually used.Hence, this commit could even get a stable tag for 3.5+.
Quoted 7 lines
Quoted 1 line
Yes, you're right. We should append this string.
Would this go through your tree or will Arnd or Eric pick those patches?
Thanks,
Daniel
Sure, I'll send the pull request to Arnd.
Regards
Haojian