[0/2] sound: dice: Firestudio Mobile

Message ID 20221015233330.8679-1-thirtythreeforty@gmail.com
Headers
Series sound: dice: Firestudio Mobile |

Message

George Hilliard Oct. 15, 2022, 11:33 p.m. UTC
  This short series adds a configuration block for the Firestudio Mobile I
just acquired.  Very similar to the Firestudio, but a lower port count.

My understanding is that the Low, Medium, and High speeds refer to
48kHz, 96kHz, and 192kHz sample rates, of which only the first two are
supported by this hardware line.  Please correct me if this is not
correct.

Thanks!
  

Comments

Takashi Sakamoto Oct. 16, 2022, 1:37 a.m. UTC | #1
Hi,

On Sat, Oct 15, 2022 at 06:33:28PM -0500, George Hilliard wrote:
> This short series adds a configuration block for the Firestudio Mobile I
> just acquired.  Very similar to the Firestudio, but a lower port count.
> 
> My understanding is that the Low, Medium, and High speeds refer to
> 48kHz, 96kHz, and 192kHz sample rates, of which only the first two are
> supported by this hardware line.  Please correct me if this is not
> correct.
> 
> Thanks!

Thanks for the patches, while the device, FireStudio Mobile, is
already supported by ALSA dice driver since it has an entry of moddevice
table which matches your device:

```
	{
		.match_flags = IEEE1394_MATCH_VERSION,
		.version     = DICE_INTERFACE,
	},
```

I think you have the other troubles except for device detection.


In general protocol defined by TC Applied Technologies (the company
which designed DICE ASICs and firmwares), two fields of content of
configuration ROM have pre-defined values.

One of the fields is version field of unit directory. The value is
0x000001 (=DICE_INTERFACE). In your case, the content of unit directory
is below. We can see the value of version field is 0x000001.

```
               unit directory at 430
               ---------------------------------------------------
430  00048030  directory_length 4, crc 32816
434  12000a92  specifier id: Presonus Corporation
438  13000001  version
43c  17000011  model
440  8100000f  --> descriptor leaf at 47c
```

Another is EUI-64 field in bus information block. the part of field
is used for 8 bit `category ID` and the value is 0. In your case,
the value is below. The way to parese the field, please refer to
`check_dice_category` function in `sound/firewire/dice/dice.c`[1].

```
               ROM header and bus information block
               ---------------------------------------------------
400  0404bc6a  bus_info_length 4, crc_length 4, crc 48234
404  31333934  bus_name "1394"
408  e0008102  irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 0, max_rec 8 (512)
40c  000a9204  company_id 000a92     | Presonus Corporation
410  047da647  device_id 04047da647  | EUI-64 000a9204047da647
```

For the content of configuration ROM itself, documentation by 1394
Trading Association (vendor association back in several years ago) will
be a great help[2].


As a supplement, TCAT general protocol has no way to share available
stream formats at all of supported sampling transfer frequencies. It
allows software just to read available stream formats at current
sampling transfer frequency, while TCAT protocol extension has the
function.  ALSA dice driver is programmed to try the extension to detect,
then works at limitation mode at failure. The pre-defined table you coded
is for the case that the extension is not supported by device, but
your device supports the extension.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git/tree/sound/firewire/dice/dice.c#n33
[2] https://web.archive.org/web/20210216003042/http://1394ta.org/wp-content/uploads/2015/07/1999027.pdf


Thanks

Takashi Sakamoto