Re: adding more machines to snd-aoa

2008-10-24 Thread Johannes Berg
Here's a patch that actually applies against 2.6.27.

---
 sound/aoa/fabrics/snd-aoa-fabric-layout.c |   73 +++---
 sound/aoa/soundbus/i2sbus/i2sbus-core.c   |   16 --
 2 files changed, 68 insertions(+), 21 deletions(-)

--- everything.orig/sound/aoa/fabrics/snd-aoa-fabric-layout.c   2008-10-24 
13:35:00.0 +0200
+++ everything/sound/aoa/fabrics/snd-aoa-fabric-layout.c2008-10-24 
14:42:32.0 +0200
@@ -1,16 +1,14 @@
 /*
- * Apple Onboard Audio driver -- layout fabric
+ * Apple Onboard Audio driver -- layout/machine id fabric
  *
- * Copyright 2006 Johannes Berg <[EMAIL PROTECTED]>
+ * Copyright 2006, 2008 Johannes Berg <[EMAIL PROTECTED]>
  *
  * GPL v2, can be found in COPYING.
  *
  *
- * This fabric module looks for sound codecs
- * based on the layout-id property in the device tree.
- *
+ * This fabric module looks for sound codecs based on the
+ * layout-id or device-id property in the device tree.
  */
-
 #include 
 #include 
 #include 
@@ -63,7 +61,7 @@ struct codec_connect_info {
 #define LAYOUT_FLAG_COMBO_LINEOUT_SPDIF(1<<0)
 
 struct layout {
-   unsigned int layout_id;
+   unsigned int layout_id, device_id;
struct codec_connect_info codecs[MAX_CODECS_PER_BUS];
int flags;

@@ -111,6 +109,10 @@ MODULE_ALIAS("sound-layout-96");
 MODULE_ALIAS("sound-layout-98");
 MODULE_ALIAS("sound-layout-100");
 
+MODULE_ALIAS("aoa-device-id-14");
+MODULE_ALIAS("aoa-device-id-22");
+MODULE_ALIAS("aoa-device-id-35");
+
 /* onyx with all but microphone connected */
 static struct codec_connection onyx_connections_nomic[] = {
{
@@ -518,6 +520,27 @@ static struct layout layouts[] = {
.connections = onyx_connections_noheadphones,
  },
},
+   /* PowerMac3,4 */
+   { .device_id = 14,
+ .codecs[0] = {
+   .name = "tas",
+   .connections = tas_connections_noline,
+ },
+   },
+   /* PowerMac3,6 */
+   { .device_id = 22,
+ .codecs[0] = {
+   .name = "tas",
+   .connections = tas_connections_all,
+ },
+   },
+   /* PowerBook5,2 */
+   { .device_id = 35,
+ .codecs[0] = {
+   .name = "tas",
+   .connections = tas_connections_all,
+ },
+   },
{}
 };
 
@@ -526,7 +549,7 @@ static struct layout *find_layout_by_id(
struct layout *l;
 
l = layouts;
-   while (l->layout_id) {
+   while (l->codecs[0].name) {
if (l->layout_id == id)
return l;
l++;
@@ -534,6 +557,19 @@ static struct layout *find_layout_by_id(
return NULL;
 }
 
+static struct layout *find_layout_by_device(unsigned int id)
+{
+   struct layout *l;
+
+   l = layouts;
+   while (l->codecs[0].name) {
+   if (l->device_id == id)
+   return l;
+   l++;
+   }
+   return NULL;
+}
+
 static void use_layout(struct layout *l)
 {
int i;
@@ -938,8 +974,8 @@ static struct aoa_fabric layout_fabric =
 static int aoa_fabric_layout_probe(struct soundbus_dev *sdev)
 {
struct device_node *sound = NULL;
-   const unsigned int *layout_id;
-   struct layout *layout;
+   const unsigned int *id;
+   struct layout *layout = NULL;
struct layout_dev *ldev = NULL;
int err;
 
@@ -952,15 +988,18 @@ static int aoa_fabric_layout_probe(struc
if (sound->type && strcasecmp(sound->type, "soundchip") == 0)
break;
}
-   if (!sound) return -ENODEV;
+   if (!sound)
+   return -ENODEV;
 
-   layout_id = of_get_property(sound, "layout-id", NULL);
-   if (!layout_id)
-   goto outnodev;
-   printk(KERN_INFO "snd-aoa-fabric-layout: found bus with layout %d\n",
-  *layout_id);
+   id = of_get_property(sound, "layout-id", NULL);
+   if (id) {
+   layout = find_layout_by_id(*id);
+   } else {
+   id = of_get_property(sound, "device-id", NULL);
+   if (id)
+   layout = find_layout_by_device(*id);
+   }
 
-   layout = find_layout_by_id(*layout_id);
if (!layout) {
printk(KERN_ERR "snd-aoa-fabric-layout: unknown layout\n");
goto outnodev;
--- everything.orig/sound/aoa/soundbus/i2sbus/i2sbus-core.c 2008-10-24 
14:01:15.0 +0200
+++ everything/sound/aoa/soundbus/i2sbus/i2sbus-core.c  2008-10-24 
14:42:32.0 +0200
@@ -186,13 +186,21 @@ static int i2sbus_add_dev(struct macio_d
}
}
if (i == 1) {
-   const u32 *layout_id =
-   of_get_property(sound, "layout-id", NULL);
-   if (layout_id) {
-   layout = *layout_id;
+   const u32 *id = of_get_property(sound, "layout-id", NULL);
+
+   if (id) {
+  

Re: adding more machines to snd-aoa

2008-10-24 Thread Johannes Berg
On Fri, 2008-10-24 at 14:26 +0200, Gabriel Paubert wrote:

> > Right. I'll assume it has a microphone too, built-in. 
> 
> I doubt it: 
> - no mention found in the doc
> - it seems to be output-only (#-inputs in the device tree is 0,
> #-outputs is 3).

Yeah, I've disabled it in the patch I sent you.

> I could also send you the device tree of my PowerBook G3: it does
> have the device-id property with a value of 10, but the parent
> node is called davbus instead of i2s. That one definitely has
> a microphone...

No, I don't really care about davbus at this point. TBH, I don't care
much about the other machines either, and there are lots... I'll have to
find a way to map the #-inputs and #-outputs to the information
otherwise I'll have to dig out all the manuals or something...

> > Could you try the
> > patch below, enable all snd-aoa modules and see what happens?
> > 
> 
> I won't have time in the next few days, sorry. 

No worries, let me know when you can.

johannes


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Re: adding more machines to snd-aoa

2008-10-24 Thread Gabriel Paubert
On Fri, Oct 24, 2008 at 10:40:23AM +0200, Johannes Berg wrote:
> On Thu, 2008-10-23 at 18:43 +0200, Gabriel Paubert wrote:
> 
> > > Can you tell me which devices it has, like does it have line-in,
> > > microphone, headphones, ...?
> > 
> > I'm not an audio specialist, so the symbols used to
> > identify the ports look like hieroglyphs to me, but 
> > The documentation says that the two ports on the
> > back are for headphones and external stereo loudspeakers.
> 
> Right. I'll assume it has a microphone too, built-in. 

I doubt it: 
- no mention found in the doc
- it seems to be output-only (#-inputs in the device tree is 0,
#-outputs is 3).

I have attached the device tree corresponding to the PCI domain.

I could also send you the device tree of my PowerBook G3: it does
have the device-id property with a value of 10, but the parent
node is called davbus instead of i2s. That one definitely has
a microphone...

> Could you try the
> patch below, enable all snd-aoa modules and see what happens?
> 

I won't have time in the next few days, sorry. 

Regards,
Gabriel


pmac4,3-pci@f200.tar.gz
Description: Binary data
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Re: adding more machines to snd-aoa

2008-10-24 Thread Johannes Berg
On Thu, 2008-10-23 at 18:43 +0200, Gabriel Paubert wrote:

> > Can you tell me which devices it has, like does it have line-in,
> > microphone, headphones, ...?
> 
> I'm not an audio specialist, so the symbols used to
> identify the ports look like hieroglyphs to me, but 
> The documentation says that the two ports on the
> back are for headphones and external stereo loudspeakers.

Right. I'll assume it has a microphone too, built-in. Could you try the
patch below, enable all snd-aoa modules and see what happens?

johannes
---
 sound/aoa/fabrics/snd-aoa-fabric-layout.c |   73 +++---
 sound/aoa/soundbus/i2sbus/i2sbus-core.c   |   16 --
 2 files changed, 68 insertions(+), 21 deletions(-)

--- everything.orig/sound/aoa/fabrics/snd-aoa-fabric-layout.c   2008-10-24 
10:39:20.0 +0200
+++ everything/sound/aoa/fabrics/snd-aoa-fabric-layout.c2008-10-24 
10:40:08.0 +0200
@@ -1,16 +1,14 @@
 /*
- * Apple Onboard Audio driver -- layout fabric
+ * Apple Onboard Audio driver -- layout/machine id fabric
  *
- * Copyright 2006 Johannes Berg <[EMAIL PROTECTED]>
+ * Copyright 2006, 2008 Johannes Berg <[EMAIL PROTECTED]>
  *
  * GPL v2, can be found in COPYING.
  *
  *
- * This fabric module looks for sound codecs
- * based on the layout-id property in the device tree.
- *
+ * This fabric module looks for sound codecs based on the
+ * layout-id or device-id property in the device tree.
  */
-
 #include 
 #include 
 #include 
@@ -63,7 +61,7 @@ struct codec_connect_info {
 #define LAYOUT_FLAG_COMBO_LINEOUT_SPDIF(1<<0)
 
 struct layout {
-   unsigned int layout_id;
+   unsigned int layout_id, device_id;
struct codec_connect_info codecs[MAX_CODECS_PER_BUS];
int flags;

@@ -111,6 +109,10 @@ MODULE_ALIAS("sound-layout-96");
 MODULE_ALIAS("sound-layout-98");
 MODULE_ALIAS("sound-layout-100");
 
+MODULE_ALIAS("aoa-device-id-14");
+MODULE_ALIAS("aoa-device-id-22");
+MODULE_ALIAS("aoa-device-id-35");
+
 /* onyx with all but microphone connected */
 static struct codec_connection onyx_connections_nomic[] = {
{
@@ -518,6 +520,27 @@ static struct layout layouts[] = {
.connections = onyx_connections_noheadphones,
  },
},
+   /* PowerMac3,4 */
+   { .device_id = 14,
+ .codecs[0] = {
+   .name = "tas",
+   .connections = tas_connections_noline,
+ },
+   },
+   /* PowerMac3,6 */
+   { .device_id = 22,
+ .codecs[0] = {
+   .name = "tas",
+   .connections = tas_connections_all,
+ },
+   },
+   /* PowerBook5,2 */
+   { .device_id = 35,
+ .codecs[0] = {
+   .name = "tas",
+   .connections = tas_connections_all,
+ },
+   },
{}
 };
 
@@ -526,7 +549,7 @@ static struct layout *find_layout_by_id(
struct layout *l;
 
l = layouts;
-   while (l->layout_id) {
+   while (l->codecs[0].name) {
if (l->layout_id == id)
return l;
l++;
@@ -534,6 +557,19 @@ static struct layout *find_layout_by_id(
return NULL;
 }
 
+static struct layout *find_layout_by_device(unsigned int id)
+{
+   struct layout *l;
+
+   l = layouts;
+   while (l->codecs[0].name) {
+   if (l->device_id == id)
+   return l;
+   l++;
+   }
+   return NULL;
+}
+
 static void use_layout(struct layout *l)
 {
int i;
@@ -938,8 +974,8 @@ static struct aoa_fabric layout_fabric =
 static int aoa_fabric_layout_probe(struct soundbus_dev *sdev)
 {
struct device_node *sound = NULL;
-   const unsigned int *layout_id;
-   struct layout *layout;
+   const unsigned int *id;
+   struct layout *layout = NULL;
struct layout_dev *ldev = NULL;
int err;
 
@@ -952,15 +988,18 @@ static int aoa_fabric_layout_probe(struc
if (sound->type && strcasecmp(sound->type, "soundchip") == 0)
break;
}
-   if (!sound) return -ENODEV;
+   if (!sound)
+   return -ENODEV;
 
-   layout_id = of_get_property(sound, "layout-id", NULL);
-   if (!layout_id)
-   goto outnodev;
-   printk(KERN_INFO "snd-aoa-fabric-layout: found bus with layout %d\n",
-  *layout_id);
+   id = of_get_property(sound, "layout-id", NULL);
+   if (id) {
+   layout = find_layout_by_id(*id);
+   } else {
+   id = of_get_property(sound, "device-id", NULL);
+   if (id)
+   layout = find_layout_by_device(*id);
+   }
 
-   layout = find_layout_by_id(*layout_id);
if (!layout) {
printk(KERN_ERR "snd-aoa-fabric-layout: unknown layout\n");
goto outnodev;
--- everything.orig/sound/aoa/soundbus/i2sbus/i2sbus-core.c 2008-10-24 
10:39:20.0 +0200
+++ everything/sound/

Re: adding more machines to snd-aoa

2008-10-23 Thread Niklaus Giger

Am Donnerstag 23 Oktober 2008 15.44:21 schrieb Johannes Berg:
Hi Johannes

My wife has a PowerBook with exactly the machine you are looking for.
(Running Linux pb 2.6.24-19-powerpc #1 Fri Jul 11 21:37:37 UTC 2008 ppc 
GNU/Linux)

Therefore here the following info.

cat /proc/cpuinfo
processor   : 0
cpu : 7447/7457, altivec supported
clock   : 999.999000MHz
revision: 0.1 (pvr 8002 0101)
bogomips: 60.02
timebase: 18432000
platform: PowerMac
machine : PowerBook5,2
motherboard : PowerBook5,2 MacRISC3 Power Macintosh
detected as : 287 (PowerBook G4 15")
pmac flags  : 001b
L2 cache: 512K unified
pmac-generation : NewWorld
/proc/device-tree/[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL 
PROTECTED]/sound/device-id
 find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd
  00 00 00 23   |...#|
0004

If you want the whole device tree, just tell me how to dump it and I will send 
it to you.

Best regards

Niklaus
> Hi,
>
> Andreas (Cc'ed) asked whether it was possible to use snd-aoa on his
> machine, a PowerMac3,6. It appears that it is fairly easy since the
> machine seems to use a regular i2sbus.
>
> To identify it, after looking through my device-tree collections I think
> that the "device-id" property of the sound node would be the best bet.
> This is the value "22" for a PowerMac3,6.
>
> However, this node is also present on at least a PowerBook5,2 (value
> 35). Can somebody who has such a machine please reply to this me?
> Sjoerd, I think you have/had such a machine? I'd like you to test a few
> patches once they're ready, and I need to know what connectors it has
> (line-in, mic, headphones, ...).
>
> However, even if that works, I'll also need to know whether there are
> any other machines that have such a device-id property so that making
> snd-aoa-i2sbus aware of machines with device-id doesn't break those that
> I don't list. Therefore, if you have access to a machine that is
> newworld and has audio, please run the following commands:
>
> find /proc/device-tree/ -wholename '*sound/device-id'
> find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd
>
> and let me know their output. No output is fine, I'm only interested in
> those machines that have this property. If you have access to a DT
> collection (hi Ben :) ) I'd appreciate if you could run it on that.
>
> johannes

-- 
NIklaus Giger

___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: adding more machines to snd-aoa

2008-10-23 Thread Benjamin Herrenschmidt
On Thu, 2008-10-23 at 18:43 +0200, Gabriel Paubert wrote:
> 
> Yes, on a pristine 2.6.27 kernel right now.
> 
> > Can you tell me which devices it has, like does it have line-in,
> > microphone, headphones, ...?
> 
> I'm not an audio specialist, so the symbols used to
> identify the ports look like hieroglyphs to me, but 
> The documentation says that the two ports on the
> back are for headphones and external stereo loudspeakers.
> 
> And the sound is definitely i2s given the OF entry:
> 
> /proc/device-tree/[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL 
> PROTECTED]/[EMAIL PROTECTED]/sound/device-id

Best if you send a device-tree dump to Johannes.

Cheers,
Ben.


___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: adding more machines to snd-aoa

2008-10-23 Thread Gabriel Paubert
On Thu, Oct 23, 2008 at 05:41:02PM +0200, Johannes Berg wrote:
> On Thu, 2008-10-23 at 17:35 +0200, Gabriel Paubert wrote:
> 
> > On my almost 8 years old PowerMac (PowerMac3,4 accorfing to OF):
> > 
> > $ find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd
> >   00 00 00 0e   ||
> > 0004
> > 
> > or 14 in decimal.
> 
> Cool. This thing uses snd-powermac, right? 

Yes, on a pristine 2.6.27 kernel right now.

> Can you tell me which devices it has, like does it have line-in,
> microphone, headphones, ...?

I'm not an audio specialist, so the symbols used to
identify the ports look like hieroglyphs to me, but 
The documentation says that the two ports on the
back are for headphones and external stereo loudspeakers.

And the sound is definitely i2s given the OF entry:

/proc/device-tree/[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL PROTECTED]/[EMAIL 
PROTECTED]/sound/device-id

Regards,
Gabriel
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


Re: adding more machines to snd-aoa

2008-10-23 Thread Johannes Berg
On Thu, 2008-10-23 at 17:35 +0200, Gabriel Paubert wrote:

> On my almost 8 years old PowerMac (PowerMac3,4 accorfing to OF):
> 
> $ find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd
>   00 00 00 0e   ||
> 0004
> 
> or 14 in decimal.

Cool. This thing uses snd-powermac, right? Can you tell me which devices
it has, like does it have line-in, microphone, headphones, ...?

johannes


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Re: adding more machines to snd-aoa

2008-10-23 Thread Gabriel Paubert
On Thu, Oct 23, 2008 at 03:44:21PM +0200, Johannes Berg wrote:
> Hi,
> 
> Andreas (Cc'ed) asked whether it was possible to use snd-aoa on his
> machine, a PowerMac3,6. It appears that it is fairly easy since the
> machine seems to use a regular i2sbus.
> 
> To identify it, after looking through my device-tree collections I think
> that the "device-id" property of the sound node would be the best bet.
> This is the value "22" for a PowerMac3,6.
> 
> However, this node is also present on at least a PowerBook5,2 (value
> 35). Can somebody who has such a machine please reply to this me?
> Sjoerd, I think you have/had such a machine? I'd like you to test a few
> patches once they're ready, and I need to know what connectors it has
> (line-in, mic, headphones, ...).
> 
> However, even if that works, I'll also need to know whether there are
> any other machines that have such a device-id property so that making
> snd-aoa-i2sbus aware of machines with device-id doesn't break those that
> I don't list. Therefore, if you have access to a machine that is
> newworld and has audio, please run the following commands:
> 
> find /proc/device-tree/ -wholename '*sound/device-id'
> find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd
> 

On my almost 8 years old PowerMac (PowerMac3,4 accorfing to OF):

$ find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd
  00 00 00 0e   ||
0004

or 14 in decimal.

Regards,
Gabriel
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev


adding more machines to snd-aoa

2008-10-23 Thread Johannes Berg
Hi,

Andreas (Cc'ed) asked whether it was possible to use snd-aoa on his
machine, a PowerMac3,6. It appears that it is fairly easy since the
machine seems to use a regular i2sbus.

To identify it, after looking through my device-tree collections I think
that the "device-id" property of the sound node would be the best bet.
This is the value "22" for a PowerMac3,6.

However, this node is also present on at least a PowerBook5,2 (value
35). Can somebody who has such a machine please reply to this me?
Sjoerd, I think you have/had such a machine? I'd like you to test a few
patches once they're ready, and I need to know what connectors it has
(line-in, mic, headphones, ...).

However, even if that works, I'll also need to know whether there are
any other machines that have such a device-id property so that making
snd-aoa-i2sbus aware of machines with device-id doesn't break those that
I don't list. Therefore, if you have access to a machine that is
newworld and has audio, please run the following commands:

find /proc/device-tree/ -wholename '*sound/device-id'
find /proc/device-tree/ -wholename '*sound/device-id' | xargs hd

and let me know their output. No output is fine, I'm only interested in
those machines that have this property. If you have access to a DT
collection (hi Ben :) ) I'd appreciate if you could run it on that.

johannes


signature.asc
Description: This is a digitally signed message part
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev