Moved firmware to alsa-firmware module, corrected DATAPATH

This commit is contained in:
Jaroslav Kysela 2003-11-25 16:07:05 +00:00
parent a2f5768907
commit b4037faa0e
9 changed files with 52 additions and 16305 deletions

View file

@ -1,15 +1,16 @@
# # Process this file with automake to produce Makefile.in. # # Process this file with automake to produce Makefile.in.
MYNAME = hdsploader
SUBDIRS = firmware
bin_PROGRAMS = hdsploader bin_PROGRAMS = hdsploader
AM_CFLAGS = -DDATAPATH=\"$(datadir)/alsa/firmware/$(MYNAME)\"
hdsploader_SOURCES = hdsploader.c hdsploader_SOURCES = hdsploader.c
EXTRA_DIST = depcomp EXTRA_DIST = depcomp
alsa-dist: distdir alsa-dist: distdir
@rm -rf ../distdir/hdsploader @rm -rf ../distdir/$(MYNAME)
@mkdir -p ../distdir/hdsploader @mkdir -p ../distdir/$(MYNAME)
@cp -RLpv $(distdir)/* ../distdir/hdsploader @cp -RLpv $(distdir)/* ../distdir/$(MYNAME)
@rm -rf $(distdir) @rm -rf $(distdir)

View file

@ -3,5 +3,14 @@ hdsploader - firmware loader for the RME Hammerfall DSP cards
USAGE USAGE
=====
Just run hdsploader, the program takes care of everything. Just run hdsploader, the program takes care of everything.
FILES
=====
The firmware binaries are installed on /usr/share/alsa/firmware/hdsploader
(or /usr/local/share/alsa/firmware/hdsploader, depending to the prefix
option of configure). There will be *.conf files, which define the dsp
image files for each different card type.

View file

@ -49,4 +49,4 @@ else
fi fi
fi fi
AC_OUTPUT(Makefile firmware/Makefile) AC_OUTPUT(Makefile)

View file

@ -1 +0,0 @@
EXTRA_DIST = $(wildcard *.dat)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -20,14 +20,38 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <endian.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <alsa/asoundlib.h> #include <alsa/asoundlib.h>
#include <sound/hdsp.h> #include <sound/hdsp.h>
#include "firmware/multiface_firmware.dat" static u_int32_t code[24413];
#include "firmware/digiface_firmware.dat"
#include "firmware/multiface_firmware_rev11.dat" int read_bin_file(u_int32_t *array, const char *filename)
#include "firmware/digiface_firmware_rev11.dat" {
FILE *out;
if ((out = fopen(filename, "r")) == NULL) {
fprintf(stderr, "Unable to open file '%s' for reading\n", filename);
return -1;
}
if (fread(array, 4, 24413, out) != 24413) {
fclose(out);
return -1;
}
fclose(out);
#if __BYTE_ORDER == __BIG_ENDIAN
{
unsigned int idx;
for (idx = 0; idx < 24413; idx++)
array[idx] = ((array[idx] & 0x000000ff) << 16) |
((array[idx] & 0x0000ff00) << 8) |
((array[idx] & 0x00ff0000) >> 8) |
((array[idx] & 0xff000000) >> 16);
}
#endif
return 0;
}
void upload_firmware(int card) void upload_firmware(int card)
{ {
@ -55,19 +79,20 @@ void upload_firmware(int card)
return; return;
} }
firmware.firmware_data = (unsigned long *)code;
switch (version.io_type) { switch (version.io_type) {
case Multiface: case Multiface:
if (version.firmware_rev == 0xa) { if (version.firmware_rev == 0xa) {
firmware.firmware_data = multiface_firmware; err = read_bin_file(code, DATAPATH "multiface_firmware.bin");
} else { } else {
firmware.firmware_data = multiface_firmware_rev11; err = read_bin_file(code, DATAPATH "multiface_firmware_rev11.bin");
} }
break; break;
case Digiface: case Digiface:
if (version.firmware_rev == 0xa) { if (version.firmware_rev == 0xa) {
firmware.firmware_data = digiface_firmware; err = read_bin_file(code, DATAPATH "digiface_firmware.bin");
} else { } else {
firmware.firmware_data = digiface_firmware_rev11; err = read_bin_file(code, DATAPATH "digiface_firmware_rev11.bin");
} }
break; break;
default: default:
@ -75,6 +100,8 @@ void upload_firmware(int card)
snd_hwdep_close(hw); snd_hwdep_close(hw);
return; return;
} }
if (err < 0)
return;
if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE, &firmware)) < 0) { if ((err = snd_hwdep_ioctl(hw, SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE, &firmware)) < 0) {
fprintf(stderr, "Hwdep ioctl error on card %s : %s.\n", card_name, snd_strerror(err)); fprintf(stderr, "Hwdep ioctl error on card %s : %s.\n", card_name, snd_strerror(err));
@ -115,4 +142,3 @@ int main(int argc, char **argv)
} }
return 0; return 0;
} }