Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
xonar_xense [Le 13/09/2013, 23:37] – [Limitations et bugs] billou | xonar_xense [Le 02/06/2017, 21:20] (Version actuelle) – YoBoY | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== Carte son : Xonar Xense ====== | ||
+ | La carte son d' | ||
+ | |||
+ | {{http:// | ||
+ | ===== Spécifications techniques ===== | ||
+ | |||
+ | **Chip / DSP** : ASUS AV100 | ||
+ | |||
+ | **Bus** : PCI Express 1x | ||
+ | |||
+ | **Nombre de canaux audio** : 7,1 | ||
+ | |||
+ | **Convertisseur N/A** : 24 bits / 192 kHz | ||
+ | |||
+ | **Convertisseur A/N** : 24 bits / 192 kHz | ||
+ | |||
+ | **Fréquence des tests** : 44.1 kHz (min.) - 192 kHz (maximum) | ||
+ | |||
+ | **Rapport signal / bruit** : 118 dB / 64 - 300 ohms | ||
+ | |||
+ | **Bande passante en réponse** : 10 - 46000 Hz | ||
+ | |||
+ | **Normes audio supportées** : ASIO2, | ||
+ | |||
+ | **Caractéristiques** : Décodeur Dolby Pro Logic II intégré, technologie casque Dolby, technologie Dolby Virtual Speaker, Smart Volume Normalizer, FlexBass, Xear 3D Virtual Speaker Shifter | ||
+ | |||
+ | **Entrées externes** : Line IN / Micro (Jack 6.35mm) | ||
+ | |||
+ | **Sorties externes** : Sortie 7.1 (câble splitter DVI vers multi Jack 3.5mm), Casque (Jack 6.35mm), Audio numérique S/PDIF Coaxiale | ||
+ | |||
+ | **Entrées et sorties internes** : Auxiliaire (pour boitier PC) | ||
+ | |||
+ | |||
+ | |||
+ | ===== Support de la carte son sous le noyau Linux ===== | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | J'ai tenté à plusieurs reprises de contacter Asus à ce sujet, sans succès, la hotline se contentant de répondre à côté de la plaque, en évoquant à la limite, le support de MacOS pour la carte, mais ne mentionnant rien du tout pour le noyau Linux. | ||
+ | De même j'ai fait chou blanc en tentant de rentrer en contact avec les développeurs d'Alsa et ai appris via un forum que le mainteneur principal du module " | ||
+ | C'est là qu'en juillet 2013, ô surprise, je suis tombé un peu par hasard, sur une contribution incomplète sur mailing list du projet ALSA, du développeur Ian Dawes , que j'ai finit par contacter par mail, malgré mon anglais plus que douteux, et auprès duquel je me suis manifesté pour effectuer les divers tests de ses patchs. | ||
+ | Le support préliminaire ne prenait en charge que la sortie 7.1 en stéréo, mais pas la sortie audio Jack 6.35mm proposée sur la carte, enfin en mi Aout 2013; ce dernier a apporté des modifications significatives à son patch, assez pour pouvoir être qualifié d' | ||
+ | |||
+ | ===== Paquet prêt à l' | ||
+ | |||
+ | Un paquet recompilant automatiquement le module à chaque mise à jour du noyau linux, est [[http:// | ||
+ | |||
+ | Installez le, puis redémarrez votre système. | ||
+ | |||
+ | ===== Code source===== | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | diff --git a/ | ||
+ | index 64b9fda..df99ec9 100644 | ||
+ | --- a/ | ||
+ | +++ b/ | ||
+ | @@ -52,6 +52,7 @@ static DEFINE_PCI_DEVICE_TABLE(xonar_ids) = { | ||
+ | { OXYGEN_PCI_SUBID(0x1043, | ||
+ | { OXYGEN_PCI_SUBID(0x1043, | ||
+ | { OXYGEN_PCI_SUBID(0x1043, | ||
+ | + { OXYGEN_PCI_SUBID(0x1043, | ||
+ | { OXYGEN_PCI_SUBID(0x1043, | ||
+ | { OXYGEN_PCI_SUBID_BROKEN_EEPROM }, | ||
+ | { } | ||
+ | diff --git a/ | ||
+ | b/ | ||
+ | index c8c7f2c..7f31df8 100644 | ||
+ | --- a/ | ||
+ | +++ b/ | ||
+ | @@ -212,6 +212,11 @@ | ||
+ | # | ||
+ | # | ||
+ | |||
+ | +#define GPIO_XENSE_OUTPUT_ENABLE (0x0001 | 0x0010 | 0x0020) | ||
+ | +#define GPIO_XENSE_HP_REAR | ||
+ | +#define GPIO_XENSE_MAGIC | ||
+ | +#define GPIO_XENSE_SPEAKERS | ||
+ | + | ||
+ | # | ||
+ | /W=0 */ | ||
+ | # | ||
+ | |||
+ | @@ -499,6 +504,52 @@ static void xonar_stx_init(struct oxygen *chip) | ||
+ | | ||
+ | } | ||
+ | |||
+ | +static void xonar_xense_init(struct oxygen *chip) | ||
+ | +{ | ||
+ | + struct xonar_pcm179x *data = chip-> | ||
+ | + | ||
+ | + data-> | ||
+ | + data-> | ||
+ | + data-> | ||
+ | + xonar_init_ext_power(chip); | ||
+ | + | ||
+ | + data-> | ||
+ | + data->h6 = chip-> | ||
+ | + data-> | ||
+ | + data-> | ||
+ | + data-> | ||
+ | + | ||
+ | + oxygen_write16(chip, | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + | ||
+ | + xonar_st_init_i2c(chip); | ||
+ | + cs2000_registers_init(chip); | ||
+ | + | ||
+ | + data-> | ||
+ | + data-> | ||
+ | + data-> | ||
+ | + | ||
+ | + pcm1796_init(chip); | ||
+ | + | ||
+ | + oxygen_set_bits16(chip, | ||
+ | + GPIO_INPUT_ROUTE | GPIO_XENSE_HP_REAR | | ||
+ | + GPIO_XENSE_MAGIC | GPIO_XENSE_SPEAKERS); | ||
+ | + oxygen_clear_bits16(chip, | ||
+ | + GPIO_INPUT_ROUTE | GPIO_XENSE_HP_REAR | GPIO_XENSE_SPEAKERS); | ||
+ | + | ||
+ | + xonar_init_cs53x1(chip); | ||
+ | + xonar_enable_output(chip); | ||
+ | + | ||
+ | + snd_component_add(chip-> | ||
+ | + snd_component_add(chip-> | ||
+ | + snd_component_add(chip-> | ||
+ | +} | ||
+ | + | ||
+ | | ||
+ | { | ||
+ | | ||
+ | @@ -763,7 +814,6 @@ static int st_output_switch_get(struct snd_kcontrol | ||
+ | *ctl, | ||
+ | | ||
+ | } | ||
+ | |||
+ | - | ||
+ | | ||
+ | | ||
+ | { | ||
+ | @@ -859,6 +909,67 @@ static const struct snd_kcontrol_new st_controls[] = { | ||
+ | }, | ||
+ | }; | ||
+ | |||
+ | +static int xense_output_switch_get(struct snd_kcontrol *ctl, | ||
+ | + struct snd_ctl_elem_value *value) | ||
+ | +{ | ||
+ | + struct oxygen *chip = ctl-> | ||
+ | + u16 gpio; | ||
+ | + | ||
+ | + gpio = oxygen_read16(chip, | ||
+ | + if (gpio & GPIO_XENSE_SPEAKERS) | ||
+ | + value-> | ||
+ | + else if (!(gpio & GPIO_XENSE_SPEAKERS) && (gpio & GPIO_XENSE_HP_REAR)) | ||
+ | + value-> | ||
+ | + else | ||
+ | + value-> | ||
+ | + return 0; | ||
+ | +} | ||
+ | + | ||
+ | +static int xense_output_switch_put(struct snd_kcontrol *ctl, | ||
+ | + struct snd_ctl_elem_value *value) | ||
+ | +{ | ||
+ | + struct oxygen *chip = ctl-> | ||
+ | + struct xonar_pcm179x *data = chip-> | ||
+ | + u16 gpio_old, gpio; | ||
+ | + | ||
+ | + mutex_lock(& | ||
+ | + gpio_old = oxygen_read16(chip, | ||
+ | + gpio = gpio_old; | ||
+ | + switch (value-> | ||
+ | + case 0: | ||
+ | + gpio |= GPIO_XENSE_SPEAKERS | GPIO_XENSE_HP_REAR; | ||
+ | + break; | ||
+ | + case 1: | ||
+ | + gpio = (gpio | GPIO_XENSE_HP_REAR) & ~GPIO_XENSE_SPEAKERS; | ||
+ | + break; | ||
+ | + case 2: | ||
+ | + gpio &= ~(GPIO_XENSE_SPEAKERS | GPIO_XENSE_HP_REAR); | ||
+ | + break; | ||
+ | + } | ||
+ | + oxygen_write16(chip, | ||
+ | + data-> | ||
+ | + update_pcm1796_volume(chip); | ||
+ | + mutex_unlock(& | ||
+ | + return gpio != gpio_old; | ||
+ | +} | ||
+ | + | ||
+ | +static const struct snd_kcontrol_new xense_controls[] = { | ||
+ | + { | ||
+ | + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
+ | + .name = " | ||
+ | + .info = st_output_switch_info, | ||
+ | + .get = xense_output_switch_get, | ||
+ | + .put = xense_output_switch_put, | ||
+ | + }, | ||
+ | + { | ||
+ | + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
+ | + .name = " | ||
+ | + .info = st_hp_volume_offset_info, | ||
+ | + .get = st_hp_volume_offset_get, | ||
+ | + .put = st_hp_volume_offset_put, | ||
+ | + }, | ||
+ | +}; | ||
+ | + | ||
+ | | ||
+ | unsigned int reg, unsigned int mute) | ||
+ | { | ||
+ | @@ -946,6 +1057,23 @@ static int xonar_st_mixer_init(struct oxygen *chip) | ||
+ | | ||
+ | } | ||
+ | |||
+ | +static int xonar_xense_mixer_init(struct oxygen *chip) | ||
+ | +{ | ||
+ | + unsigned int i; | ||
+ | + int err; | ||
+ | + | ||
+ | + for (i = 0; i < ARRAY_SIZE(xense_controls); | ||
+ | + err = snd_ctl_add(chip-> | ||
+ | + snd_ctl_new1(& | ||
+ | + if (err < 0) | ||
+ | + return err; | ||
+ | + } | ||
+ | + err = add_pcm1796_controls(chip); | ||
+ | + if (err < 0) | ||
+ | + return err; | ||
+ | + return 0; | ||
+ | +} | ||
+ | + | ||
+ | | ||
+ | struct snd_info_buffer *buffer) | ||
+ | { | ||
+ | @@ -1138,6 +1266,13 @@ int get_xonar_pcm179x_model(struct oxygen *chip, | ||
+ | | ||
+ | | ||
+ | | ||
+ | + case 0x8428: | ||
+ | + chip-> | ||
+ | + chip-> | ||
+ | + chip-> | ||
+ | + chip-> | ||
+ | + chip-> | ||
+ | + break; | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Il vous incombera désormais de patcher les sources du noyau Linux et de compiler uniquement les modules nécessaires au bon fonctionnement de la carte (pour ça, vous aurez déjà besoin d' | ||
+ | |||
+ | Déplacez vous dans le dossier des sources des modules pour appliquer le patch ( cd linux-3.**/ | ||
+ | < | ||
+ | |||
+ | Une fois ces dernières patchées retournez à la racine du dossier des sources du noyau Linux à l'aide de la commande " | ||
+ | |||
+ | Exécutez ces commandes à adapter selon votre version du noyau : | ||
+ | |||
+ | < | ||
+ | cd / | ||
+ | sudo cp / | ||
+ | sudo cp / | ||
+ | sudo make prepare | ||
+ | sudo make scripts | ||
+ | sudo make -j4 M=sound/ | ||
+ | sudo rm / | ||
+ | sudo cp sound/ | ||
+ | </ | ||
+ | |||
+ | Ensuite, redémarrez le système et chargez le module : | ||
+ | < | ||
+ | sudo modprobe snd-virtuoso | ||
+ | </ | ||
+ | |||
+ | |||
+ | En gros, avec ces commandes, on copie les fichiers de configuration pour compiler le noyau tel que ça a été fait pour le noyau présentement utilisé au sein du système, ensuite on prépare le nécessaire pour la prise en charge des options en question, puis on compile, pour obtenir 3 fichiers distincts ( snd-oxygen.ko / snd-oxygen-lib.ko / snd-virtuoso.ko ) qui sont nos fameux modules (drivers) patchés pour le support de la Xonar Xense, et enfin la copie de ces dernier en remplacement de ceux actuellement présents, et leur chargement pour utilisation courante. | ||
+ | |||
+ | Un petit test rapide avec l' | ||
+ | |||
+ | {{http:// | ||
+ | |||
+ | Voilà, profitez bien de votre carte Xonar Xense sous Linux ! | ||
+ | |||
+ | ===== Limitations et bugs ===== | ||
+ | |||
+ | Ce patch est le prémisse du support officiel de cette carte son, actuellement une seule limitation est connue par rapport aux pilotes, et pas des moindres, toutes les sorties, 7.1 analagique et spdif comprises, ne fonctionnent pour le moment qu'en Stéréo. | ||
+ | |||
+ | ===== Liens ===== | ||
+ | http:// | ||
+ | |||
+ | http:// | ||
+ | |||
+ | http:// | ||
+ | |||
+ | http:// |