#define SNDRV_SEQ_IOCTL_CLIENT_ID      _IOR ('S', 0x01, int)
 #define SNDRV_SEQ_IOCTL_SYSTEM_INFO    _IOWR('S', 0x02, struct snd_seq_system_info)
 #define SNDRV_SEQ_IOCTL_RUNNING_MODE   _IOWR('S', 0x03, struct snd_seq_running_info)
+#define SNDRV_SEQ_IOCTL_USER_PVERSION  _IOW('S', 0x04, int)
 
 #define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO        _IOWR('S', 0x10, struct snd_seq_client_info)
 #define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO        _IOW ('S', 0x11, struct snd_seq_client_info)
 
        return 0;
 }
 
+static int snd_seq_ioctl_user_pversion(struct snd_seq_client *client, void *arg)
+{
+       client->user_pversion = *(unsigned int *)arg;
+       return 0;
+}
+
 static int snd_seq_ioctl_client_id(struct snd_seq_client *client, void *arg)
 {
        int *client_id = arg;
        int (*func)(struct snd_seq_client *client, void *arg);
 } ioctl_handlers[] = {
        { SNDRV_SEQ_IOCTL_PVERSION, snd_seq_ioctl_pversion },
+       { SNDRV_SEQ_IOCTL_USER_PVERSION, snd_seq_ioctl_user_pversion },
        { SNDRV_SEQ_IOCTL_CLIENT_ID, snd_seq_ioctl_client_id },
        { SNDRV_SEQ_IOCTL_SYSTEM_INFO, snd_seq_ioctl_system_info },
        { SNDRV_SEQ_IOCTL_RUNNING_MODE, snd_seq_ioctl_running_mode },
        client->accept_input = 1;
        client->accept_output = 1;
        client->data.kernel.card = card;
+       client->user_pversion = SNDRV_SEQ_VERSION;
                
        va_start(args, name_fmt);
        vsnprintf(client->name, sizeof(client->name), name_fmt, args);
 
        snd_seq_client_type_t type;
        unsigned int accept_input: 1,
                accept_output: 1;
+       unsigned int user_pversion;
        char name[64];          /* client name */
        int number;             /* client number */
        unsigned int filter;    /* filter flags */
 
 
        switch (cmd) {
        case SNDRV_SEQ_IOCTL_PVERSION:
+       case SNDRV_SEQ_IOCTL_USER_PVERSION:
        case SNDRV_SEQ_IOCTL_CLIENT_ID:
        case SNDRV_SEQ_IOCTL_SYSTEM_INFO:
        case SNDRV_SEQ_IOCTL_GET_CLIENT_INFO: