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 asm/prom.h
 #include linux/list.h
 #include linux/module.h
@@ -63,7 +61,7 @@ struct codec_connect_info {
 #define LAYOUT_FLAG_COMBO_LINEOUT_SPDIF(10)
 
 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
+++ 

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 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 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 asm/prom.h
 #include linux/list.h
 #include linux/module.h
@@ -63,7 +61,7 @@ struct codec_connect_info {
 #define LAYOUT_FLAG_COMBO_LINEOUT_SPDIF(10)
 
 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-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


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