Skip to contentSkip to conversation

ice1712: Add support for Philips PSC724 Ultimate Edge

PATCH In review Ondrej Zary 3 participants 7 messages Mar 13, 2012 – Apr 1, 2012 Sound

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ice1712: Add support for Philips PSC724 Ultimate Edge

Hello,
I'm trying do implement support for Philips PSC724 Ultimate Edge card, which is based on VT1722 + WM8776 + WM8766 chips. I've examined the connections and commented them in the code. The patch is heavily based on se.c.

When trying to play a sound, the player runs but no sound comes from the output, no matter what I do with alsamixer.

The interesting thing is that recording works - I can record something from e.g. line-in and play it on another machine. Recording source selection in alsamixer works too (if line-in is deselected, only silence is recorded). So WM8776 I2C control works.

I'm missing something but don't know what. Any ideas?

sound/pci/ice1712/Makefile +0 -1
index f7ce33f..6d6ae06 100644
@@ -5,7 +5,7 @@
 
 snd-ice17xx-ak4xxx-objs := ak4xxx.o
 snd-ice1712-objs := ice1712.o delta.o hoontech.o ews.o
-snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o prodigy_hifi.o juli.o phase.o wtm.o se.o maya44.o 

quartet.o
+snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o prodigy_hifi.o juli.o phase.o wtm.o se.o maya44.o quartet.o psc724.o

# Toplevel Module Dependency obj-$(CONFIG_SND_ICE1712) += snd-ice1712.o snd-ice17xx-ak4xxx.o

sound/pci/ice1712/ice1724.c +3 -1
index 9236297..d19db09 100644
@@ -54,6 +54,7 @@
 #include "wtm.h"
 #include "se.h"
 #include "quartet.h"
+#include "psc724.h"
 
 MODULE_AUTHOR("Jaroslav Kysela <[email protected]>");
 MODULE_DESCRIPTION("VIA ICEnsemble ICE1724/1720 (Envy24HT/PT)");
@@ -2234,6 +2235,7 @@ static struct snd_ice1712_card_info *card_tables[] __devinitdata = {
 	snd_vt1724_se_cards,
 	snd_vt1724_qtet_cards,
 	snd_vt1724_ooaoo_cards,
+	snd_vt1724_psc724_cards,
 	NULL,
 };
 
@@ -2348,7 +2350,7 @@ static int __devinit snd_vt1724_read_eeprom(struct snd_ice1712 *ice,
 		return -EIO;
 	}
 	ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05);
-	if (ice->eeprom.version != 2)
+	if (ice->eeprom.version != 1 && ice->eeprom.version != 2)
 		printk(KERN_WARNING "ice1724: Invalid EEPROM version %i\n",
 		       ice->eeprom.version);
 	size = ice->eeprom.size - 6;
sound/pci/ice1712/psc724.c new file +664 -0

664 lines not on this page · raw message

sound/pci/ice1712/psc724.h new file +13 -0
new file mode 100644
index 0000000..858e5fd
@@ -0,0 +1,13 @@
+#ifndef __SOUND_PSC724_H
+#define __SOUND_PSC724_H
+
+/* ID */
+#define PSC724_DEVICE_DESC	\
+		"{Philips,PSC724 Ultimate Edge},"
+
+#define VT1724_SUBDEVICE_PSC724		0xab170619
+
+/* entry struct */
+extern struct snd_ice1712_card_info snd_vt1724_psc724_cards[];
+
+#endif /* __SOUND_PSC724_H */
Signature · 1 line
Ondrej Zary
#1 lore raw

Dne 13.3.2012 21:59, Ondrej Zary napsal(a):

Quoted 8 lines

Hello,
I'm trying do implement support for Philips PSC724 Ultimate Edge card, which is based on VT1722 + WM8776 + WM8766 chips. I've examined the connections and commented them in the code. The patch is heavily based on se.c.

When trying to play a sound, the player runs but no sound comes from the output, no matter what I do with alsamixer.

Quoted 7 lines

The interesting thing is that recording works - I can record something from e.g. line-in and play it on another machine. Recording source selection in alsamixer works too (if line-in is deselected, only silence is recorded). So WM8776 I2C control works.

I'm missing something but don't know what. Any ideas?

I always found that a simple proc interface listing all register values of the chips onboard greatly helped with troubleshooting. E.g.
http://git.alsa-project.org/?p=alsa-kmirror.git;a=blob;f=i2c/other/ak4xxx-adda.c;h=cef813d23641afcd39b56a57c5fc8058cb99bfb0;hb=HEAD#l879

http://git.alsa-project.org/?p=alsa-kmirror.git;a=blob;f=i2c/other/ak4114.c;h=fdf3c1b65e388414c995a597ef2b351b4ec2a220;hb=HEAD#l451

Regards,

Pavel.

#2 lore raw
Quoted 5 lines · Pavel Hofman

I always found that a simple proc interface listing all register values of the chips onboard greatly helped with troubleshooting. E.g.
http://git.alsa-project.org/?p=alsa-kmirror.git;a=blob;f=i2c/other/ak4xxx-adda.c;h=cef813d23641afcd39b56a57c5fc8058cb99bfb0;hb=HEAD#l879

http://git.alsa-project.org/?p=alsa-kmirror.git;a=blob;f=i2c/other/ak4114.c;h=fdf3c1b65e388414c995a597ef2b351b4ec2a220;hb=HEAD#l451

If you use regmap for your register I/O you get this for free (plus some other infrastructure stuff).

#3 lore raw

Dne 13.3.2012 22:33, Mark Brown napsal(a):

Quoted 10 lines · Pavel Hofman
Quoted 6 lines

I always found that a simple proc interface listing all register values of the chips onboard greatly helped with troubleshooting. E.g.
http://git.alsa-project.org/?p=alsa-kmirror.git;a=blob;f=i2c/other/ak4xxx-adda.c;h=cef813d23641afcd39b56a57c5fc8058cb99bfb0;hb=HEAD#l879

http://git.alsa-project.org/?p=alsa-kmirror.git;a=blob;f=i2c/other/ak4114.c;h=fdf3c1b65e388414c995a597ef2b351b4ec2a220;hb=HEAD#l451

If you use regmap for your register I/O you get this for free (plus some other infrastructure stuff).

Mark, thanks for the information. I searched sound-2.6 tree and found the only reference to linux/regmap.h in soc-io.c. Please could you point me to a place where it is used in alsa source code so that I could take it as an example? I have no problem with using the latest kernel infrastructure helpers but there are just too many of them.

Thanks a lot,

Pavel.

#4 lore raw
Quoted 5 lines · Pavel Hofman

Mark, thanks for the information. I searched sound-2.6 tree and found the only reference to linux/regmap.h in soc-io.c. Please could you point me to a place where it is used in alsa source code so that I could take it as an example? I have no problem with using the latest kernel infrastructure helpers but there are just too many of them.

You've already found an example, what problems are you having with that example? There's also other examples in the kernel, especially in more recent kernels.

#5 lore raw
In reply to Ondrej Zary
Quoted 9 lines · On Tuesday 13 March 2012 21:59:16 Ondrej Zary wrote:

Hello,
I'm trying do implement support for Philips PSC724 Ultimate Edge card, which is based on VT1722 + WM8776 + WM8766 chips. I've examined the connections and commented them in the code. The patch is heavily based on se.c.

When trying to play a sound, the player runs but no sound comes from the output, no matter what I do with alsamixer.

Quoted 6 lines

The interesting thing is that recording works - I can record something from e.g. line-in and play it on another machine. Recording source selection in alsamixer works too (if line-in is deselected, only silence is recorded). So WM8776 I2C control works.

I'm missing something but don't know what. Any ideas?

I've missed a mute-all circuit (which grounds all outputs) controlled by GPIO22. Now the driver works - front, rear and center/lfe outputs. TODO:
- support headphone output
- move WM8776 and WM8766 code out

sound/pci/ice1712/Makefile +1 -1
index f7ce33f..6d6ae06 100644
@@ -5,7 +5,7 @@
 
 snd-ice17xx-ak4xxx-objs := ak4xxx.o
 snd-ice1712-objs := ice1712.o delta.o hoontech.o ews.o
-snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o prodigy_hifi.o juli.o phase.o wtm.o se.o maya44.o quartet.o
+snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o prodigy_hifi.o juli.o phase.o wtm.o se.o maya44.o quartet.o psc724.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_ICE1712) += snd-ice1712.o snd-ice17xx-ak4xxx.o
sound/pci/ice1712/ice1724.c +3 -1
index 9236297..d19db09 100644
@@ -54,6 +54,7 @@
 #include "wtm.h"
 #include "se.h"
 #include "quartet.h"
+#include "psc724.h"
 
 MODULE_AUTHOR("Jaroslav Kysela <[email protected]>");
 MODULE_DESCRIPTION("VIA ICEnsemble ICE1724/1720 (Envy24HT/PT)");
@@ -2234,6 +2235,7 @@ static struct snd_ice1712_card_info *card_tables[] __devinitdata = {
 	snd_vt1724_se_cards,
 	snd_vt1724_qtet_cards,
 	snd_vt1724_ooaoo_cards,
+	snd_vt1724_psc724_cards,
 	NULL,
 };
 
@@ -2348,7 +2350,7 @@ static int __devinit snd_vt1724_read_eeprom(struct snd_ice1712 *ice,
 		return -EIO;
 	}
 	ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05);
-	if (ice->eeprom.version != 2)
+	if (ice->eeprom.version != 1 && ice->eeprom.version != 2)
 		printk(KERN_WARNING "ice1724: Invalid EEPROM version %i\n",
 		       ice->eeprom.version);
 	size = ice->eeprom.size - 6;
sound/pci/ice1712/psc724.c new file +688 -0

688 lines not on this page · raw message

sound/pci/ice1712/psc724.h new file +13 -0
new file mode 100644
index 0000000..858e5fd
@@ -0,0 +1,13 @@
+#ifndef __SOUND_PSC724_H
+#define __SOUND_PSC724_H
+
+/* ID */
+#define PSC724_DEVICE_DESC	\
+		"{Philips,PSC724 Ultimate Edge},"
+
+#define VT1724_SUBDEVICE_PSC724		0xab170619
+
+/* entry struct */
+extern struct snd_ice1712_card_info snd_vt1724_psc724_cards[];
+
+#endif /* __SOUND_PSC724_H */
Signature · 1 line
Ondrej Zary
#6 lore raw
Quoted 15 lines · On Wednesday 21 March 2012 00:03:42 Ondrej Zary wrote:
Quoted 14 lines · On Tuesday 13 March 2012 21:59:16 Ondrej Zary wrote:

Hello,
I'm trying do implement support for Philips PSC724 Ultimate Edge card, which is based on VT1722 + WM8776 + WM8766 chips. I've examined the connections and commented them in the code. The patch is heavily based on se.c.

When trying to play a sound, the player runs but no sound comes from the output, no matter what I do with alsamixer.

The interesting thing is that recording works - I can record something from e.g. line-in and play it on another machine. Recording source selection in alsamixer works too (if line-in is deselected, only silence is recorded). So WM8776 I2C control works.

Quoted 8 lines
Quoted 1 line

I'm missing something but don't know what. Any ideas?

I've missed a mute-all circuit (which grounds all outputs) controlled by GPIO22. Now the driver works - front, rear and center/lfe outputs. TODO:
- support headphone output
- move WM8776 and WM8766 code out

New version again, this time with headphone output support. Including (simple and broken) headphone jack detection (using GPIO14).

sound/pci/ice1712/Makefile +1 -1
index f7ce33f..6d6ae06 100644
@@ -5,7 +5,7 @@
 
 snd-ice17xx-ak4xxx-objs := ak4xxx.o
 snd-ice1712-objs := ice1712.o delta.o hoontech.o ews.o
-snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o prodigy_hifi.o juli.o phase.o wtm.o se.o maya44.o quartet.o
+snd-ice1724-objs := ice1724.o amp.o revo.o aureon.o vt1720_mobo.o pontis.o prodigy192.o prodigy_hifi.o juli.o phase.o wtm.o se.o maya44.o quartet.o psc724.o
 
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_ICE1712) += snd-ice1712.o snd-ice17xx-ak4xxx.o
sound/pci/ice1712/ice1724.c +3 -1
index 9236297..d19db09 100644
@@ -54,6 +54,7 @@
 #include "wtm.h"
 #include "se.h"
 #include "quartet.h"
+#include "psc724.h"
 
 MODULE_AUTHOR("Jaroslav Kysela <[email protected]>");
 MODULE_DESCRIPTION("VIA ICEnsemble ICE1724/1720 (Envy24HT/PT)");
@@ -2234,6 +2235,7 @@ static struct snd_ice1712_card_info *card_tables[] __devinitdata = {
 	snd_vt1724_se_cards,
 	snd_vt1724_qtet_cards,
 	snd_vt1724_ooaoo_cards,
+	snd_vt1724_psc724_cards,
 	NULL,
 };
 
@@ -2348,7 +2350,7 @@ static int __devinit snd_vt1724_read_eeprom(struct snd_ice1712 *ice,
 		return -EIO;
 	}
 	ice->eeprom.version = snd_vt1724_read_i2c(ice, dev, 0x05);
-	if (ice->eeprom.version != 2)
+	if (ice->eeprom.version != 1 && ice->eeprom.version != 2)
 		printk(KERN_WARNING "ice1724: Invalid EEPROM version %i\n",
 		       ice->eeprom.version);
 	size = ice->eeprom.size - 6;
sound/pci/ice1712/psc724.c new file +755 -0

755 lines not on this page · raw message

sound/pci/ice1712/psc724.h new file +13 -0
new file mode 100644
index 0000000..858e5fd
@@ -0,0 +1,13 @@
+#ifndef __SOUND_PSC724_H
+#define __SOUND_PSC724_H
+
+/* ID */
+#define PSC724_DEVICE_DESC	\
+		"{Philips,PSC724 Ultimate Edge},"
+
+#define VT1724_SUBDEVICE_PSC724		0xab170619
+
+/* entry struct */
+extern struct snd_ice1712_card_info snd_vt1724_psc724_cards[];
+
+#endif /* __SOUND_PSC724_H */
Signature · 1 line
Ondrej Zary