46 if (mode == OPEN_READ)
52 spin_unlock_irqrestore(&devc->
lock, flags);
59 spin_unlock_irqrestore(&devc->
lock, flags);
64 spin_unlock_irqrestore(&devc->
lock, flags);
128 static void sb_set_output_parms(
int dev,
unsigned long buf,
int nr_bytes,
149 static void sb_set_input_parms(
int dev,
unsigned long buf,
int count,
int intrflag)
173 static void sb1_audio_output_block(
int dev,
unsigned long buf,
int nr_bytes,
int intrflag)
176 int count = nr_bytes;
195 spin_unlock_irqrestore(&devc->
lock, flags);
199 static void sb1_audio_start_input(
int dev,
unsigned long buf,
int nr_bytes,
int intrflag)
202 int count = nr_bytes;
225 spin_unlock_irqrestore(&devc->
lock, flags);
230 static void sb1_audio_trigger(
int dev,
int bits)
256 static int sb1_audio_prepare_for_input(
int dev,
int bsize,
int bcount)
265 spin_unlock_irqrestore(&devc->
lock, flags);
271 static int sb1_audio_prepare_for_output(
int dev,
int bsize,
int bcount)
280 spin_unlock_irqrestore(&devc->
lock, flags);
285 static int sb1_audio_set_speed(
int dev,
int speed)
287 int max_speed = 23000;
299 if (speed > max_speed)
302 devc->
tconst = (256 - ((1000000 + speed / 2) / speed)) & 0xff;
304 speed = (1000000 + tmp / 2) / tmp;
311 static short sb1_audio_set_channels(
int dev,
short channels)
317 static unsigned int sb1_audio_set_bits(
int dev,
unsigned int bits)
320 return devc->
bits = 8;
323 static void sb1_audio_halt_xfer(
int dev)
330 spin_unlock_irqrestore(&devc->
lock, flags);
337 static void sb20_audio_output_block(
int dev,
unsigned long buf,
int nr_bytes,
341 int count = nr_bytes;
369 spin_unlock_irqrestore(&devc->
lock, flags);
373 static void sb20_audio_start_input(
int dev,
unsigned long buf,
int nr_bytes,
int intrflag)
376 int count = nr_bytes;
408 spin_unlock_irqrestore(&devc->
lock, flags);
412 static void sb20_audio_trigger(
int dev,
int bits)
441 static int sb201_audio_set_speed(
int dev,
int speed)
455 devc->
tconst = (256 - ((1000000 + s / 2) / s)) & 0xff;
457 speed = ((1000000 + tmp / 2) / tmp) / devc->
channels;
468 static int sbpro_audio_prepare_for_input(
int dev,
int bsize,
int bcount)
472 unsigned char bits = 0;
490 spin_unlock_irqrestore(&devc->
lock, flags);
496 static int sbpro_audio_prepare_for_output(
int dev,
int bsize,
int bcount)
501 unsigned char bits = 0;
522 spin_unlock_irqrestore(&devc->
lock, flags);
526 spin_unlock_irqrestore(&devc->
lock, flags);
538 static int sbpro_audio_set_speed(
int dev,
int speed)
548 if (devc->
channels > 1 && speed > 22050)
550 sb201_audio_set_speed(dev, speed);
555 static short sbpro_audio_set_channels(
int dev,
short channels)
559 if (channels == 1 || channels == 2)
565 sbpro_audio_set_speed(dev, devc->
speed);
571 static int jazz16_audio_set_speed(
int dev,
int speed)
587 devc->
tconst = (256 - ((1000000 + s / 2) / s)) & 0xff;
590 speed = ((1000000 + tmp / 2) / tmp) / devc->
channels;
601 static int sb16_audio_set_speed(
int dev,
int speed)
611 if (speed > max_speed)
619 static unsigned int sb16_audio_set_bits(
int dev,
unsigned int bits)
634 static int sb16_audio_prepare_for_input(
int dev,
int bsize,
int bcount)
660 static int sb16_audio_prepare_for_output(
int dev,
int bsize,
int bcount)
686 static void sb16_audio_output_block(
int dev,
unsigned long buf,
int count,
710 spin_unlock_irqrestore(&devc->
lock, flags);
733 spin_unlock_irqrestore(&devc->
lock, flags);
744 static void sb16_audio_start_input(
int dev,
unsigned long buf,
int count,
int intrflag)
779 spin_unlock_irqrestore(&devc->
lock, flags);
782 static void sb16_audio_trigger(
int dev,
int bits)
789 if (!bits && !bits_16)
798 sb16_audio_start_input(dev,
805 sb16_audio_output_block(dev,
817 sb16_audio_start_input(dev,
824 sb16_audio_output_block(dev,
836 static unsigned char lbuf8[2048];
837 static signed short *lbuf16 = (
signed short *)lbuf8;
838 #define LBUFCOPYSIZE 1024
840 sb16_copy_from_user(
int dev,
841 char *localbuf,
int localoffs,
842 const char __user *userbuf,
int useroffs,
843 int max_in,
int max_out,
844 int *
used,
int *returned,
848 int i,
c,
p, locallen;
856 userbuf + useroffs, len))
869 len = ( (max_in >> 1) > max_out) ? max_out : (max_in >> 1);
872 buf8 = (
unsigned char *)(localbuf + localoffs);
878 userbuf + useroffs + (p << 1),
881 for (i = 0; i < locallen; i++)
883 buf8[p+
i] = ~((lbuf16[
i] >> 8) & 0xff) ^ 0x80;
885 c -= locallen; p += locallen;
888 *used = max_in > ( max_out << 1) ? (max_out << 1) : max_in;
900 len = max_in > (max_out >> 1) ? (max_out >> 1) : max_in;
903 buf16 = (
signed short *)(localbuf + localoffs);
908 userbuf+useroffs + p,
911 for (i = 0; i < locallen; i++)
913 buf16[p+
i] = (~lbuf8[
i] ^ 0x80) << 8;
915 c -= locallen; p += locallen;
920 *returned = len << 1;
925 sb16_audio_mmap(
int dev)
936 .output_block = sb_set_output_parms,
937 .start_input = sb_set_input_parms,
938 .prepare_for_input = sb1_audio_prepare_for_input,
939 .prepare_for_output = sb1_audio_prepare_for_output,
940 .halt_io = sb1_audio_halt_xfer,
941 .trigger = sb1_audio_trigger,
942 .set_speed = sb1_audio_set_speed,
943 .set_bits = sb1_audio_set_bits,
944 .set_channels = sb1_audio_set_channels
952 .output_block = sb_set_output_parms,
953 .start_input = sb_set_input_parms,
954 .prepare_for_input = sb1_audio_prepare_for_input,
955 .prepare_for_output = sb1_audio_prepare_for_output,
956 .halt_io = sb1_audio_halt_xfer,
957 .trigger = sb20_audio_trigger,
958 .set_speed = sb1_audio_set_speed,
959 .set_bits = sb1_audio_set_bits,
960 .set_channels = sb1_audio_set_channels
968 .output_block = sb_set_output_parms,
969 .start_input = sb_set_input_parms,
970 .prepare_for_input = sb1_audio_prepare_for_input,
971 .prepare_for_output = sb1_audio_prepare_for_output,
972 .halt_io = sb1_audio_halt_xfer,
973 .trigger = sb20_audio_trigger,
974 .set_speed = sb201_audio_set_speed,
975 .set_bits = sb1_audio_set_bits,
976 .set_channels = sb1_audio_set_channels
984 .output_block = sb_set_output_parms,
985 .start_input = sb_set_input_parms,
986 .prepare_for_input = sbpro_audio_prepare_for_input,
987 .prepare_for_output = sbpro_audio_prepare_for_output,
988 .halt_io = sb1_audio_halt_xfer,
989 .trigger = sb20_audio_trigger,
990 .set_speed = sbpro_audio_set_speed,
991 .set_bits = sb1_audio_set_bits,
992 .set_channels = sbpro_audio_set_channels
1000 .output_block = sb_set_output_parms,
1001 .start_input = sb_set_input_parms,
1002 .prepare_for_input = sbpro_audio_prepare_for_input,
1003 .prepare_for_output = sbpro_audio_prepare_for_output,
1004 .halt_io = sb1_audio_halt_xfer,
1005 .trigger = sb20_audio_trigger,
1006 .set_speed = jazz16_audio_set_speed,
1007 .set_bits = sb16_audio_set_bits,
1008 .set_channels = sbpro_audio_set_channels
1016 .output_block = sb_set_output_parms,
1017 .start_input = sb_set_input_parms,
1018 .prepare_for_input = sb16_audio_prepare_for_input,
1019 .prepare_for_output = sb16_audio_prepare_for_output,
1020 .halt_io = sb1_audio_halt_xfer,
1021 .copy_user = sb16_copy_from_user,
1022 .trigger = sb16_audio_trigger,
1023 .set_speed = sb16_audio_set_speed,
1024 .set_bits = sb16_audio_set_bits,
1025 .set_channels = sbpro_audio_set_channels,
1026 .mmap = sb16_audio_mmap
1031 int audio_flags = 0;
1036 switch (devc->
model)
1039 DDB(
printk(
"Will use standard SB1.x driver\n"));
1046 driver = &sb20_audio_driver;
1050 DDB(
printk(
"Will use SB2.01 (high speed) driver\n"));
1052 driver = &sb201_audio_driver;
1057 DDB(
printk(
"Will use Jazz16 driver\n"));
1060 driver = &jazz16_audio_driver;
1064 DDB(
printk(
"Will use ESS ES688/1688 driver\n"));
1077 driver = &sb16_audio_driver;
1081 DDB(
printk(
"Will use SB Pro driver\n"));
1083 driver = &sbpro_audio_driver;
1091 audio_flags, format_mask, devc,