[alsa-devel] CS4232 Playback bug on Tecra 500
I have been running into the problem briefly mentioned at the wiki entry http://alsa.opensrc.org/index.php/Toshiba_Tecra_500CDT. Playback using the CS4232 driver in native or oss emulation mode fails randomly. Once the failure occurs, subsequent attempts to playback stop shortly after opening the device and tickling the speakers (perhaps the buffer gets filled once). Under heavy network load, the initial failure will occur rather soon, within 15 minutes or so of playback. When I am playing songs from the hard drive, the failure takes a very long time, and when I use oss emulation and play from the harddrive, I have been unable to replicate the bug. The CPU does have the F00F bug if that might make some difference. I have attached a backtrace resulting from the attempts to use aplay after the failure has occurred. I may be able to attempt to capture a backtrace at the initial failure if this would be helpful. There are no obvious error messages in my logfiles or printed to the console when the bug occurs. Please let me know how I can assist in squashing this bug. I attempted to use the alsa-info script, but it appears that the database where it uploads the results is broken at the moment. I have pastebinned the results at http://pastebin.ca/1315459
Thanks
Stanley Pinchak
Hi Stanley,
Could you post a dmesg output for this laptop?
Regards, Krzysztof
---------------------------------------------------------------------- Speak Up. Angielski szybko i skutecznie. 3 miesiace nauki gratis. Sprawdz. >> http://link.interia.pl/f2019
Krzysztof, I have attached the dmesg output to this email. Let me know if there is more that I can provide.
Thanks
Stanley Pinchak
2009/1/22 Krzysztof Helt krzysztof.h1@poczta.fm:
Hi Stanley,
Could you post a dmesg output for this laptop?
Regards, Krzysztof
Speak Up. Angielski szybko i skutecznie. 3 miesiace nauki gratis. Sprawdz. >> http://link.interia.pl/f2019
Hi Stanley,
In short words, you need to upgrade the kernel. Also, blacklist or delete the snd-cs4236.ko module.
A longer description. The ALSA page about Tecra laptop you mentioned is wrong. Your CS4232 card is a PNP BIOS device and does not need any parameters. However, your kernel is dated 20080623 and there was a fix for a cs4232 driver crash commited on 20080727 to the kernel. The crash is visible in your dmesg file:
[ 91.243845] BUG: unable to handle kernel NULL pointer dereference at 00000158 [ 91.244314] IP: [<c02088ad>] pnp_activate_dev+0x3/0x3a [ 91.244714] *pde = 00000000 [ 91.244977] Oops: 0000 [#1]
Next thing is that your have a second driver loaded: the snd-cs4236. Do not load this driver. AFAIR, the snd-cs4236 driver should be blacklisted or removed on laptop with the cs4232 chip and PNP BIOS. The cs4236 and cs4232 have the same PNP BIOS id-s. The snd-cs4236 was incorrectly loaded instead of the snd-cs4232 at least on my laptop (old Dell).
I hope this helps you, Krzysztof
---------------------------------------------------------------------- Promocja w Speak Up. 3 miesiace angielskiego gratis. Sprawdz teraz i wypelnij formularz! >> http://link.interia.pl/f2019
At Thu, 22 Jan 2009 17:28:56 +0100, Krzysztof Helt wrote:
Hi Stanley,
In short words, you need to upgrade the kernel. Also, blacklist or delete the snd-cs4236.ko module.
A longer description. The ALSA page about Tecra laptop you mentioned is wrong. Your CS4232 card is a PNP BIOS device and does not need any parameters. However, your kernel is dated 20080623 and there was a fix for a cs4232 driver crash commited on 20080727 to the kernel. The crash is visible in your dmesg file:
[ 91.243845] BUG: unable to handle kernel NULL pointer dereference at 00000158 [ 91.244314] IP: [<c02088ad>] pnp_activate_dev+0x3/0x3a [ 91.244714] *pde = 00000000 [ 91.244977] Oops: 0000 [#1]
Next thing is that your have a second driver loaded: the snd-cs4236. Do not load this driver. AFAIR, the snd-cs4236 driver should be blacklisted or removed on laptop with the cs4232 chip and PNP BIOS. The cs4236 and cs4232 have the same PNP BIOS id-s. The snd-cs4236 was incorrectly loaded instead of the snd-cs4232 at least on my laptop (old Dell).
Isn't there any way to check this conflict between CS4232 and CS4236? If we can know that the particular card is for snd-cs4232, snd-cs4236 could give a warning and quit...
Takashi
On Thu, 22 Jan 2009 17:37:48 +0100 Takashi Iwai tiwai@suse.de wrote:
At Thu, 22 Jan 2009 17:28:56 +0100, Krzysztof Helt wrote:
Next thing is that your have a second driver loaded: the snd-cs4236. Do not load this driver. AFAIR, the snd-cs4236 driver should be blacklisted or removed on laptop with the cs4232 chip and PNP BIOS. The cs4236 and cs4232 have the same PNP BIOS id-s. The snd-cs4236 was incorrectly loaded instead of the snd-cs4232 at least on my laptop (old Dell).
Isn't there any way to check this conflict between CS4232 and CS4236? If we can know that the particular card is for snd-cs4232, snd-cs4236 could give a warning and quit...
I don't know. A chip inside my laptop is identified as CS4236 but works with the snd-cs4232 driver. I have to open the laptop to verify. I remember problems when it run with the snd-cs4236 driver.
Regards, Krzysztof
---------------------------------------------------------------------- Zobacz gry internetowe dla dzieci! sprawdz >>>http://link.interia.pl/f202c
On Thu, 22 Jan 2009 17:37:48 +0100 Takashi Iwai tiwai@suse.de wrote:
At Thu, 22 Jan 2009 17:28:56 +0100, Krzysztof Helt wrote:
Next thing is that your have a second driver loaded: the snd-cs4236. Do not load this driver. AFAIR, the snd-cs4236 driver should be blacklisted or removed on laptop with the cs4232 chip and PNP BIOS. The cs4236 and cs4232 have the same PNP BIOS id-s. The snd-cs4236 was incorrectly loaded instead of the snd-cs4232 at least on my laptop (old Dell).
Isn't there any way to check this conflict between CS4232 and CS4236? If we can know that the particular card is for snd-cs4232, snd-cs4236 could give a warning and quit...
I have opened my laptop and it has the CS4237B chipset (the one the Dell states for this model). A problem is with ALSA drivers. The snd-cs4232 is the only driver which supports pnpbios. The snd-cs4236 does not so it does not recognize the card.
An ultimate solution would be to merge the snd-cs4236-lib into the wss-lib (as Rene Herman proposed some time ago) then prepare a single driver for all cs423x cards.
Regards, Krzysztof
---------------------------------------------------------------------- Zobacz program TV na dzis! sprawdz >>>http://link.interia.pl/f202a
At Sat, 24 Jan 2009 09:26:06 +0100, Krzysztof Helt wrote:
On Thu, 22 Jan 2009 17:37:48 +0100 Takashi Iwai tiwai@suse.de wrote:
At Thu, 22 Jan 2009 17:28:56 +0100, Krzysztof Helt wrote:
Next thing is that your have a second driver loaded: the snd-cs4236. Do not load this driver. AFAIR, the snd-cs4236 driver should be blacklisted or removed on laptop with the cs4232 chip and PNP BIOS. The cs4236 and cs4232 have the same PNP BIOS id-s. The snd-cs4236 was incorrectly loaded instead of the snd-cs4232 at least on my laptop (old Dell).
Isn't there any way to check this conflict between CS4232 and CS4236? If we can know that the particular card is for snd-cs4232, snd-cs4236 could give a warning and quit...
I have opened my laptop and it has the CS4237B chipset (the one the Dell states for this model). A problem is with ALSA drivers. The snd-cs4232 is the only driver which supports pnpbios. The snd-cs4236 does not so it does not recognize the card.
An ultimate solution would be to merge the snd-cs4236-lib into the wss-lib (as Rene Herman proposed some time ago) then prepare a single driver for all cs423x cards.
Agreed. I don't think that would be too much job, just checking cs4236_lib.c. Only the testing isn't easy nowadays just lack of available hardware.
Takashi
On Mon, 26 Jan 2009 10:45:01 +0100 Takashi Iwai tiwai@suse.de wrote:
At Sat, 24 Jan 2009 09:26:06 +0100, Krzysztof Helt wrote:
I have opened my laptop and it has the CS4237B chipset (the one the Dell states for this model). A problem is with ALSA drivers. The snd-cs4232 is the only driver which supports pnpbios. The snd-cs4236 does not so it does not recognize the card.
An ultimate solution would be to merge the snd-cs4236-lib into the wss-lib (as Rene Herman proposed some time ago) then prepare a single driver for all cs423x cards.
Agreed. I don't think that would be too much job, just checking cs4236_lib.c. Only the testing isn't easy nowadays just lack of available hardware.
The proposed solution does not help.
The problem is more complicated. The cs4236+ cards have two separate PNP bios ids! The problem here is that Linux kernel allows only one id per device. The ids are CS0010* for the CS0000* device and CS0110* for the CS0100* devices. The second device has only control port range (one io range).
I have prepared the patch which I tested on my Dell Latitude CPi laptop and now it properly discovers the CS4237B codec. Stanley, please test it as well.
The patch checks all PNP devices for the second id and if it is found (so the control port io is known) it assumes the CS4236+ chip. If not, it assumes the CS4232 chip.
This patch makes both drivers snd-cs4232 and snd-cs4236 identical so the next step is to remove one. My proposition is to remove the snd-cs4236 and change the description of the snd-cs4232 driver to handle all cs4232+ codecs.
Kind regards, Krzysztof PS. Stanley, please build only one the snd-cs4232 or snd-cs4236 driver.
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c index 019c940..d490bb8 100644 --- a/sound/isa/cs423x/cs4236.c +++ b/sound/isa/cs423x/cs4236.c @@ -33,17 +33,14 @@
MODULE_AUTHOR("Jaroslav Kysela perex@perex.cz"); MODULE_LICENSE("GPL"); -#ifdef CS4232 -MODULE_DESCRIPTION("Cirrus Logic CS4232"); +MODULE_DESCRIPTION("Cirrus Logic CS4232-9"); MODULE_SUPPORTED_DEVICE("{{Turtle Beach,TBS-2000}," "{Turtle Beach,Tropez Plus}," "{SIC CrystalWave 32}," "{Hewlett Packard,Omnibook 5500}," "{TerraTec,Maestro 32/96}," - "{Philips,PCA70PS}}"); -#else -MODULE_DESCRIPTION("Cirrus Logic CS4235-9"); -MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235}," + "{Philips,PCA70PS}}," + "{{Crystal Semiconductors,CS4235}," "{Crystal Semiconductors,CS4236}," "{Crystal Semiconductors,CS4237}," "{Crystal Semiconductors,CS4238}," @@ -70,15 +67,9 @@ MODULE_SUPPORTED_DEVICE("{{Crystal Semiconductors,CS4235}," "{Typhoon Soundsystem,CS4236B}," "{Turtle Beach,Malibu}," "{Unknown,Digital PC 5000 Onboard}}"); -#endif
-#ifdef CS4232 -#define IDENT "CS4232" -#define DEV_NAME "cs4232" -#else -#define IDENT "CS4236+" -#define DEV_NAME "cs4236" -#endif +#define IDENT "CS4232+" +#define DEV_NAME "cs4232+"
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ @@ -128,9 +119,7 @@ MODULE_PARM_DESC(dma2, "DMA2 # for " IDENT " driver."); #ifdef CONFIG_PNP static int isa_registered; static int pnpc_registered; -#ifdef CS4232 static int pnp_registered; -#endif #endif /* CONFIG_PNP */
struct snd_card_cs4236 { @@ -145,11 +134,10 @@ struct snd_card_cs4236 {
#ifdef CONFIG_PNP
-#ifdef CS4232 /* * PNP BIOS */ -static const struct pnp_device_id snd_cs4232_pnpbiosids[] = { +static const struct pnp_device_id snd_cs423x_pnpbiosids[] = { { .id = "CSC0100" }, { .id = "CSC0000" }, /* Guillemot Turtlebeach something appears to be cs4232 compatible @@ -157,10 +145,8 @@ static const struct pnp_device_id snd_cs4232_pnpbiosids[] = { { .id = "GIM0100" }, { .id = "" } }; -MODULE_DEVICE_TABLE(pnp, snd_cs4232_pnpbiosids); -#endif /* CS4232 */ +MODULE_DEVICE_TABLE(pnp, snd_cs423x_pnpbiosids);
-#ifdef CS4232 #define CS423X_ISAPNP_DRIVER "cs4232_isapnp" static struct pnp_card_device_id snd_cs423x_pnpids[] = { /* Philips PCA70PS */ @@ -179,12 +165,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = { { .id = "CSCf032", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Netfinity 3000 on-board soundcard */ { .id = "CSCe825", .devs = { { "CSC0100" }, { "CSC0110" }, { "CSC010f" } } }, - /* --- */ - { .id = "" } /* end */ -}; -#else /* CS4236 */ -#define CS423X_ISAPNP_DRIVER "cs4236_isapnp" -static struct pnp_card_device_id snd_cs423x_pnpids[] = { /* Intel Marlin Spike Motherboard - CS4235 */ { .id = "CSC0225", .devs = { { "CSC0000" }, { "CSC0010" }, { "CSC0003" } } }, /* Intel Marlin Spike Motherboard (#2) - CS4235 */ @@ -266,7 +246,6 @@ static struct pnp_card_device_id snd_cs423x_pnpids[] = { /* --- */ { .id = "" } /* end */ }; -#endif
MODULE_DEVICE_TABLE(pnp_card, snd_cs423x_pnpids);
@@ -323,17 +302,19 @@ static int __devinit snd_cs423x_pnp_init_mpu(int dev, struct pnp_dev *pdev) return 0; }
-#ifdef CS4232 -static int __devinit snd_card_cs4232_pnp(int dev, struct snd_card_cs4236 *acard, - struct pnp_dev *pdev) +static int __devinit snd_card_cs423x_pnp(int dev, struct snd_card_cs4236 *acard, + struct pnp_dev *pdev, + struct pnp_dev *cdev) { acard->wss = pdev; if (snd_cs423x_pnp_init_wss(dev, acard->wss) < 0) return -EBUSY; - cport[dev] = -1; + if (cdev) + cport[dev] = pnp_port_start(cdev, 0); + else + cport[dev] = -1; return 0; } -#endif
static int __devinit snd_card_cs423x_pnpc(int dev, struct snd_card_cs4236 *acard, struct pnp_card_link *card, @@ -409,40 +390,38 @@ static int __devinit snd_cs423x_probe(struct snd_card *card, int dev) return -EBUSY; }
-#ifdef CS4232 - err = snd_wss_create(card, port[dev], cport[dev], - irq[dev], - dma1[dev], dma2[dev], - WSS_HW_DETECT, 0, &chip); - if (err < 0) - return err; - acard->chip = chip; - - err = snd_wss_pcm(chip, 0, &pcm); - if (err < 0) - return err; - - err = snd_wss_mixer(chip); - if (err < 0) - return err; - -#else /* CS4236 */ - err = snd_cs4236_create(card, - port[dev], cport[dev], - irq[dev], dma1[dev], dma2[dev], - WSS_HW_DETECT, 0, &chip); - if (err < 0) - return err; - acard->chip = chip; - - err = snd_cs4236_pcm(chip, 0, &pcm); - if (err < 0) - return err; - - err = snd_cs4236_mixer(chip); - if (err < 0) - return err; -#endif + if (cport[dev] > 0) { + err = snd_cs4236_create(card, + port[dev], cport[dev], + irq[dev], dma1[dev], dma2[dev], + WSS_HW_DETECT, 0, &chip); + if (err < 0) + return err; + acard->chip = chip; + + err = snd_cs4236_pcm(chip, 0, &pcm); + if (err < 0) + return err; + + err = snd_cs4236_mixer(chip); + if (err < 0) + return err; + } else { + err = snd_wss_create(card, port[dev], cport[dev], + irq[dev], + dma1[dev], dma2[dev], + WSS_HW_DETECT, 0, &chip); + if (err < 0) + return err; + acard->chip = chip; + err = snd_wss_pcm(chip, 0, &pcm); + if (err < 0) + return err; + + err = snd_wss_mixer(chip); + if (err < 0) + return err; + } strcpy(card->driver, pcm->name); strcpy(card->shortname, pcm->name); sprintf(card->longname, "%s at 0x%lx, irq %i, dma %i", @@ -577,13 +556,15 @@ static struct isa_driver cs423x_isa_driver = {
#ifdef CONFIG_PNP -#ifdef CS4232 -static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev, +static int __devinit snd_cs423x_pnpbios_detect(struct pnp_dev *pdev, const struct pnp_device_id *id) { static int dev; int err; struct snd_card *card; + struct pnp_dev *cdev; + struct list_head *pos; + char cid[PNP_ID_LEN];
if (pnp_device_is_isapnp(pdev)) return -ENOENT; /* we have another procedure - card */ @@ -594,10 +575,20 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev, if (dev >= SNDRV_CARDS) return -ENODEV;
+ /* prepare second id */ + strcpy(cid, pdev->id[0].id); + cid[5] = '1'; + cdev = NULL; + list_for_each(pos, &(pdev->protocol->devices)) { + cdev = list_entry(pos, struct pnp_dev, protocol_list); + if (!strcmp(cdev->id[0].id, cid)) + break; + } card = snd_cs423x_card_new(dev); if (! card) return -ENOMEM; - if ((err = snd_card_cs4232_pnp(dev, card->private_data, pdev)) < 0) { + err = snd_card_cs423x_pnp(dev, card->private_data, pdev, cdev); + if (err < 0) { printk(KERN_ERR "PnP BIOS detection failed for " IDENT "\n"); snd_card_free(card); return err; @@ -612,35 +603,34 @@ static int __devinit snd_cs4232_pnpbios_detect(struct pnp_dev *pdev, return 0; }
-static void __devexit snd_cs4232_pnp_remove(struct pnp_dev * pdev) +static void __devexit snd_cs423x_pnp_remove(struct pnp_dev *pdev) { snd_card_free(pnp_get_drvdata(pdev)); pnp_set_drvdata(pdev, NULL); }
#ifdef CONFIG_PM -static int snd_cs4232_pnp_suspend(struct pnp_dev *pdev, pm_message_t state) +static int snd_cs423x_pnp_suspend(struct pnp_dev *pdev, pm_message_t state) { return snd_cs423x_suspend(pnp_get_drvdata(pdev)); }
-static int snd_cs4232_pnp_resume(struct pnp_dev *pdev) +static int snd_cs423x_pnp_resume(struct pnp_dev *pdev) { return snd_cs423x_resume(pnp_get_drvdata(pdev)); } #endif
-static struct pnp_driver cs4232_pnp_driver = { - .name = "cs4232-pnpbios", - .id_table = snd_cs4232_pnpbiosids, - .probe = snd_cs4232_pnpbios_detect, - .remove = __devexit_p(snd_cs4232_pnp_remove), +static struct pnp_driver cs423x_pnp_driver = { + .name = "cs423x-pnpbios", + .id_table = snd_cs423x_pnpbiosids, + .probe = snd_cs423x_pnpbios_detect, + .remove = __devexit_p(snd_cs423x_pnp_remove), #ifdef CONFIG_PM - .suspend = snd_cs4232_pnp_suspend, - .resume = snd_cs4232_pnp_resume, + .suspend = snd_cs423x_pnp_suspend, + .resume = snd_cs423x_pnp_resume, #endif }; -#endif /* CS4232 */
static int __devinit snd_cs423x_pnpc_detect(struct pnp_card_link *pcard, const struct pnp_card_device_id *pid) @@ -714,18 +704,14 @@ static int __init alsa_card_cs423x_init(void) #ifdef CONFIG_PNP if (!err) isa_registered = 1; -#ifdef CS4232 - err = pnp_register_driver(&cs4232_pnp_driver); + err = pnp_register_driver(&cs423x_pnp_driver); if (!err) pnp_registered = 1; -#endif err = pnp_register_card_driver(&cs423x_pnpc_driver); if (!err) pnpc_registered = 1; -#ifdef CS4232 if (pnp_registered) err = 0; -#endif if (isa_registered) err = 0; #endif @@ -737,10 +723,8 @@ static void __exit alsa_card_cs423x_exit(void) #ifdef CONFIG_PNP if (pnpc_registered) pnp_unregister_card_driver(&cs423x_pnpc_driver); -#ifdef CS4232 if (pnp_registered) - pnp_unregister_driver(&cs4232_pnp_driver); -#endif + pnp_unregister_driver(&cs423x_pnp_driver); if (isa_registered) #endif isa_unregister_driver(&cs423x_isa_driver);
---------------------------------------------------------------------- Konkurs Walentynkowy! Wybierz nagrode i wygraj! Sprawdz >> http://link.interia.pl/f2039
On Mon, 26 Jan 2009 18:33:15 +0100 Krzysztof Helt krzysztof.h1@poczta.fm wrote:
The problem is more complicated. The cs4236+ cards have two separate PNP bios ids! The problem here is that Linux kernel allows only one id per device. The ids are CS0010* for the CS0000* device and CS0110* for the CS0100* devices. The second device has only control port range (one io range).
I have prepared the patch which I tested on my Dell Latitude CPi laptop and now it properly discovers the CS4237B codec. Stanley, please test it as well.
Takashi,
Please take a look at the patch which unifies the cs4232 and the cs4236+ driver code. It should solve all problems with the Crystal PnP BIOS chip detection. At least, it solves this at my Dell laptop.
Regards, Krzysztof
---------------------------------------------------------------------- Promocja w Speak Up. 3 miesiace angielskiego gratis. Sprawdz teraz i wypelnij formularz! >> http://link.interia.pl/f2019
At Thu, 29 Jan 2009 16:02:13 +0100, Krzysztof Helt wrote:
On Mon, 26 Jan 2009 18:33:15 +0100 Krzysztof Helt krzysztof.h1@poczta.fm wrote:
The problem is more complicated. The cs4236+ cards have two separate PNP bios ids! The problem here is that Linux kernel allows only one id per device. The ids are CS0010* for the CS0000* device and CS0110* for the CS0100* devices. The second device has only control port range (one io range).
I have prepared the patch which I tested on my Dell Latitude CPi laptop and now it properly discovers the CS4237B codec. Stanley, please test it as well.
Takashi,
Please take a look at the patch which unifies the cs4232 and the cs4236+ driver code. It should solve all problems with the Crystal PnP BIOS chip detection. At least, it solves this at my Dell laptop.
It's pending just because I'm waiting for the report from Stanley.
The patch itself looks sane to me. We'll need an additional change to remove snd-cs4236, too, though.
Regarding removal of cs4236 -- it'd be perhaps better to provide a module alias of snd-cs4236 to keep the old system happy. But it's just a minor issue.
Takashi
Krzysztof, Thank you for the pointers. I have since upgraded to 2.6.28 and followed your blacklist suggestions. I will report back if the bug reappears. Perhaps if the bug is indeed squashed, the wiki entry on the Tecra can be updated with these suggestions.
Stanley Pinchak
On Thu, Jan 22, 2009 at 11:28 AM, Krzysztof Helt krzysztof.h1@poczta.fm wrote:
Hi Stanley,
In short words, you need to upgrade the kernel. Also, blacklist or delete the snd-cs4236.ko module.
A longer description. The ALSA page about Tecra laptop you mentioned is wrong. Your CS4232 card is a PNP BIOS device and does not need any parameters. However, your kernel is dated 20080623 and there was a fix for a cs4232 driver crash commited on 20080727 to the kernel. The crash is visible in your dmesg file:
[ 91.243845] BUG: unable to handle kernel NULL pointer dereference at 00000158 [ 91.244314] IP: [<c02088ad>] pnp_activate_dev+0x3/0x3a [ 91.244714] *pde = 00000000 [ 91.244977] Oops: 0000 [#1]
Next thing is that your have a second driver loaded: the snd-cs4236. Do not load this driver. AFAIR, the snd-cs4236 driver should be blacklisted or removed on laptop with the cs4232 chip and PNP BIOS. The cs4236 and cs4232 have the same PNP BIOS id-s. The snd-cs4236 was incorrectly loaded instead of the snd-cs4232 at least on my laptop (old Dell).
I hope this helps you, Krzysztof
Promocja w Speak Up. 3 miesiace angielskiego gratis. Sprawdz teraz i wypelnij formularz! >> http://link.interia.pl/f2019
participants (3)
-
Krzysztof Helt
-
Stanley Pinchak
-
Takashi Iwai