pcsp.c (d585a021c0b10b0477d6b608c53e1feb8cde0507) pcsp.c (bcc2c6b7cb320d10c7fcccd87dce87f4384b4332)
1/*
2 * PC-Speaker driver for Linux
3 *
4 * Copyright (C) 1997-2001 David Woodhouse
5 * Copyright (C) 2001-2008 Stas Sergeev
6 */
7
8#include <linux/init.h>

--- 12 unchanged lines hidden (view full) ---

21MODULE_DESCRIPTION("PC-Speaker driver");
22MODULE_LICENSE("GPL");
23MODULE_SUPPORTED_DEVICE("{{PC-Speaker, pcsp}}");
24MODULE_ALIAS("platform:pcspkr");
25
26static int index = SNDRV_DEFAULT_IDX1; /* Index 0-MAX */
27static char *id = SNDRV_DEFAULT_STR1; /* ID for this card */
28static int enable = SNDRV_DEFAULT_ENABLE1; /* Enable this card */
1/*
2 * PC-Speaker driver for Linux
3 *
4 * Copyright (C) 1997-2001 David Woodhouse
5 * Copyright (C) 2001-2008 Stas Sergeev
6 */
7
8#include <linux/init.h>

--- 12 unchanged lines hidden (view full) ---

21MODULE_DESCRIPTION("PC-Speaker driver");
22MODULE_LICENSE("GPL");
23MODULE_SUPPORTED_DEVICE("{{PC-Speaker, pcsp}}");
24MODULE_ALIAS("platform:pcspkr");
25
26static int index = SNDRV_DEFAULT_IDX1; /* Index 0-MAX */
27static char *id = SNDRV_DEFAULT_STR1; /* ID for this card */
28static int enable = SNDRV_DEFAULT_ENABLE1; /* Enable this card */
29static int nopcm; /* Disable PCM capability of the driver */
29
30module_param(index, int, 0444);
31MODULE_PARM_DESC(index, "Index value for pcsp soundcard.");
32module_param(id, charp, 0444);
33MODULE_PARM_DESC(id, "ID string for pcsp soundcard.");
34module_param(enable, bool, 0444);
35MODULE_PARM_DESC(enable, "Enable PC-Speaker sound.");
30
31module_param(index, int, 0444);
32MODULE_PARM_DESC(index, "Index value for pcsp soundcard.");
33module_param(id, charp, 0444);
34MODULE_PARM_DESC(id, "ID string for pcsp soundcard.");
35module_param(enable, bool, 0444);
36MODULE_PARM_DESC(enable, "Enable PC-Speaker sound.");
37module_param(nopcm, bool, 0444);
38MODULE_PARM_DESC(nopcm, "Disable PC-Speaker PCM sound. Only beeps remain.");
36
37struct snd_pcsp pcsp_chip;
38
39static int __devinit snd_pcsp_create(struct snd_card *card)
40{
41 static struct snd_device_ops ops = { };
42 struct timespec tp;
43 int err;
44 int div, min_div, order;
45
39
40struct snd_pcsp pcsp_chip;
41
42static int __devinit snd_pcsp_create(struct snd_card *card)
43{
44 static struct snd_device_ops ops = { };
45 struct timespec tp;
46 int err;
47 int div, min_div, order;
48
46 hrtimer_get_res(CLOCK_MONOTONIC, &tp);
47 if (tp.tv_sec || tp.tv_nsec > PCSP_MAX_PERIOD_NS) {
48 printk(KERN_ERR "PCSP: Timer resolution is not sufficient "
49 "(%linS)\n", tp.tv_nsec);
50 printk(KERN_ERR "PCSP: Make sure you have HPET and ACPI "
51 "enabled.\n");
52 return -EIO;
49 if (!nopcm) {
50 hrtimer_get_res(CLOCK_MONOTONIC, &tp);
51 if (tp.tv_sec || tp.tv_nsec > PCSP_MAX_PERIOD_NS) {
52 printk(KERN_ERR "PCSP: Timer resolution is not sufficient "
53 "(%linS)\n", tp.tv_nsec);
54 printk(KERN_ERR "PCSP: Make sure you have HPET and ACPI "
55 "enabled.\n");
56 printk(KERN_ERR "PCSP: Turned into nopcm mode.\n");
57 nopcm = 1;
58 }
53 }
54
55 if (loops_per_jiffy >= PCSP_MIN_LPJ && tp.tv_nsec <= PCSP_MIN_PERIOD_NS)
56 min_div = MIN_DIV;
57 else
58 min_div = MAX_DIV;
59#if PCSP_DEBUG
60 printk(KERN_DEBUG "PCSP: lpj=%li, min_div=%i, res=%li\n",

--- 41 unchanged lines hidden (view full) ---

102 if (err < 0)
103 return err;
104
105 err = snd_pcsp_create(card);
106 if (err < 0) {
107 snd_card_free(card);
108 return err;
109 }
59 }
60
61 if (loops_per_jiffy >= PCSP_MIN_LPJ && tp.tv_nsec <= PCSP_MIN_PERIOD_NS)
62 min_div = MIN_DIV;
63 else
64 min_div = MAX_DIV;
65#if PCSP_DEBUG
66 printk(KERN_DEBUG "PCSP: lpj=%li, min_div=%i, res=%li\n",

--- 41 unchanged lines hidden (view full) ---

108 if (err < 0)
109 return err;
110
111 err = snd_pcsp_create(card);
112 if (err < 0) {
113 snd_card_free(card);
114 return err;
115 }
110 err = snd_pcsp_new_pcm(&pcsp_chip);
111 if (err < 0) {
112 snd_card_free(card);
113 return err;
116 if (!nopcm) {
117 err = snd_pcsp_new_pcm(&pcsp_chip);
118 if (err < 0) {
119 snd_card_free(card);
120 return err;
121 }
114 }
122 }
115 err = snd_pcsp_new_mixer(&pcsp_chip);
123 err = snd_pcsp_new_mixer(&pcsp_chip, nopcm);
116 if (err < 0) {
117 snd_card_free(card);
118 return err;
119 }
120
121 snd_card_set_dev(pcsp_chip.card, dev);
122
123 strcpy(card->driver, "PC-Speaker");

--- 113 unchanged lines hidden ---
124 if (err < 0) {
125 snd_card_free(card);
126 return err;
127 }
128
129 snd_card_set_dev(pcsp_chip.card, dev);
130
131 strcpy(card->driver, "PC-Speaker");

--- 113 unchanged lines hidden ---