[PATCH RFC v2] ALSA: scarlett2: Add ioctls for user-space access

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jaroslav, Takashi,

I took your feedback onboard about not providing generic access to the
scarlett2_usb() function from user-space.

After a few iterations, I've come up with this hwdep interface to
support reset-to-factory-defaults, reset-to-factory-firmware, and
firmware-update in a safe way:

-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

/* Get protocol version */
#define SCARLETT2_IOCTL_PVERSION _IOR('S', 0x60, int)

/* Reboot */
#define SCARLETT2_IOCTL_REBOOT _IO('S', 0x61)

/* Select flash segment */
#define SCARLETT2_SEGMENT_ID_SETTINGS 0
#define SCARLETT2_SEGMENT_ID_FIRMWARE 1
#define SCARLETT2_SEGMENT_ID_COUNT 2

#define SCARLETT2_IOCTL_SELECT_FLASH_SEGMENT _IOW('S', 0x62, int)

/* Erase selected flash segment */
#define SCARLETT2_IOCTL_ERASE_FLASH_SEGMENT _IO('S', 0x63)

/* Get selected flash segment erase progress
 * 1 through to num_blocks, or 255 for complete
 */
struct scarlett2_flash_segment_erase_progress {
        unsigned char progress;
        unsigned char num_blocks;
};
#define SCARLETT2_IOCTL_GET_ERASE_PROGRESS \
        _IOR('S', 0x64, struct scarlett2_flash_segment_erase_progress)

-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----

Does that look reasonable to you?

Broadly, it's used like this:

Reset to factory default configuration:

- ioctl select_flash_segment SCARLETT2_SEGMENT_ID_SETTINGS
- ioctl erase_flash_segment
- ioctl get_erase_progress (optional)

Erase firmware (reverts to factory firmware which is stored in a
different flash segment, inaccessible from these ioctls):

- ioctl select_flash_segment SCARLETT2_SEGMENT_ID_FIRMWARE
- ioctl erase_flash_segment
- ioctl get_erase_progress (optional)

Upload new firmware:

- write() <- a bunch of these, only permitted after the previous erase
  step was completed

On completion:

- ioctl reboot

To confirm that this interface is sufficient, I have implemented it in
the scarlett2 driver and written a user-space utility which can
perform all the above operations.

I will clean up the implementation a bit and then submit for review;
just wanted to share the interface first in case you have any comments
at this point.

Thanks,
Geoffrey.



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux