Jump to content
Welcome to InsanelyMac Forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

  • Announcements

    • Allan

      Forum Rules   04/13/2018

      Hello folks! As some things are being fixed, we'll keep you updated. Per hour the Forum Rules don't have a dedicated "Tab", so here is the place that we have our Rules back. New Users Lounge > [READ] - InsanelyMac Forum Rules - The InsanelyMac Staff Team. 
OtaK

[Driver Programming] C-Media CMI8788 (Xonar DX/D1/D2... family)

44 posts in this topic

Recommended Posts

Would this work on my Asus Xonar Essence STX?

I've been dying to turn my HTPC into a hackintosh, but I cannot go without my soundcard.

Thank you for your efforts!

I wish I had the know-how to help.

Share this post


Link to post
Share on other sites

Hello there!

 

It's been a long time since last post from TS.

Could any one tell, how the stuff is going on, if working on it?

Any progress making the driver?

 

Integrated MB audio works good for music and bad for recording.

Anyway, sound on Xonar would be much better.

My sound card is Xonar DX, so I wait for this with patience.

Share this post


Link to post
Share on other sites

Someone, plz, find a qualified coder, which will resume the work.

Maybe we will make some community of Xonar users, that need drivers, and make some donations for coder?

Share this post


Link to post
Share on other sites

Thought I'd check up on this thread. I would think this would happen sooner or later i could see this being usefull since people who use OSX x86 do video and audio editing.

Share this post


Link to post
Share on other sites

otak .. you've really forgoten us :(

 

No, but I'm the busiest I've ever been... Sorry everyone, I won't continue writing this driver for now.

 

Most people don't write drivers for OSX anymore, that's the big problem about finding someone else.

However, if you find someone, just ping me by PM and I'll give all the resources I have.

Share this post


Link to post
Share on other sites

No one has this driver, so I sold my Xonar DX.

 

Had to install my old Audigy SB1394 with kX project drivers.

Works good in OS X 10.8.2, but there's no way to use mic or line in wit it.

It's driver settings don't work.

Only MIDI Config works for channel setup.

Analog only output works perfect though. :thumbsup_anim:

Share this post


Link to post
Share on other sites

For xonar xense support port => http://doc.ubuntu-fr.org/xonar_xense

 Signed-off-by: Ian Dawes <madeallup.gen@gmail.com>

diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c
index 64b9fda..df99ec9 100644
--- a/sound/pci/oxygen/virtuoso.c
+++ b/sound/pci/oxygen/virtuoso.c
@@ -52,6 +52,7 @@ static DEFINE_PCI_DEVICE_TABLE(xonar_ids) = {
     { OXYGEN_PCI_SUBID(0x1043, 0x835d) },
     { OXYGEN_PCI_SUBID(0x1043, 0x835e) },
     { OXYGEN_PCI_SUBID(0x1043, 0x838e) },
+    { OXYGEN_PCI_SUBID(0x1043, 0x8428) },
     { OXYGEN_PCI_SUBID(0x1043, 0x8522) },
     { OXYGEN_PCI_SUBID_BROKEN_EEPROM },
     { }
diff --git a/sound/pci/oxygen/xonar_pcm179x.c
b/sound/pci/oxygen/xonar_pcm179x.c
index c8c7f2c..7f31df8 100644
--- a/sound/pci/oxygen/xonar_pcm179x.c
+++ b/sound/pci/oxygen/xonar_pcm179x.c
@@ -212,6 +212,11 @@
 #define GPIO_ST_MAGIC        0x0040
 #define GPIO_ST_HP        0x0080
 
+#define GPIO_XENSE_OUTPUT_ENABLE (0x0001 | 0x0010 | 0x0020)
+#define GPIO_XENSE_HP_REAR       0x0002
+#define GPIO_XENSE_MAGIC         0x0040
+#define GPIO_XENSE_SPEAKERS      0x0080
+
 #define I2C_DEVICE_PCM1796(i)    (0x98 + ((i) << 1))    /* 10011, ii,
/W=0 */
 #define I2C_DEVICE_CS2000    0x9c            /* 100111, 0, /W=0 */
 
@@ -499,6 +504,52 @@ static void xonar_stx_init(struct oxygen *chip)
     xonar_st_init_common(chip);
 }
 
+static void xonar_xense_init(struct oxygen *chip)
+{
+    struct xonar_pcm179x *data = chip->model_data;
+
+    data->generic.ext_power_reg = OXYGEN_GPI_DATA;
+    data->generic.ext_power_int_reg = OXYGEN_GPI_INTERRUPT_MASK;
+    data->generic.ext_power_bit = GPI_EXT_POWER;
+    xonar_init_ext_power(chip);
+   
+    data->generic.anti_pop_delay = 100;
+    data->h6 = chip->model.dac_channels_mixer > 2;
+    data->has_cs2000 = 1;
+    data->cs2000_regs[CS2000_FUN_CFG_1] = CS2000_REF_CLK_DIV_1;
+    data->broken_i2c = true;
+
+    oxygen_write16(chip, OXYGEN_I2S_A_FORMAT,
+               OXYGEN_RATE_48000 |
+               OXYGEN_I2S_FORMAT_I2S |
+               OXYGEN_I2S_MCLK(data->h6 ? MCLK_256 : MCLK_512) |
+               OXYGEN_I2S_BITS_16 |
+               OXYGEN_I2S_MASTER |
+               OXYGEN_I2S_BCLK_64);
+
+    xonar_st_init_i2c(chip);
+    cs2000_registers_init(chip);
+   
+    data->generic.output_enable_bit = GPIO_XENSE_OUTPUT_ENABLE;
+    data->dacs = chip->model.dac_channels_mixer / 2;
+    data->hp_gain_offset = 2*-18;
+
+    pcm1796_init(chip);
+
+    oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL,
+              GPIO_INPUT_ROUTE | GPIO_XENSE_HP_REAR |
+              GPIO_XENSE_MAGIC | GPIO_XENSE_SPEAKERS);
+    oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA,
+                GPIO_INPUT_ROUTE | GPIO_XENSE_HP_REAR | GPIO_XENSE_SPEAKERS);
+
+    xonar_init_cs53x1(chip);
+    xonar_enable_output(chip);
+
+    snd_component_add(chip->card, "PCM1792A");
+    snd_component_add(chip->card, "CS5381");
+    snd_component_add(chip->card, "CS2000");
+}
+
 static void xonar_d2_cleanup(struct oxygen *chip)
 {
     xonar_disable_output(chip);
@@ -763,7 +814,6 @@ static int st_output_switch_get(struct snd_kcontrol
*ctl,
     return 0;
 }
 
-
 static int st_output_switch_put(struct snd_kcontrol *ctl,
                 struct snd_ctl_elem_value *value)
 {
@@ -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->private_data;
+    u16 gpio;
+
+    gpio = oxygen_read16(chip, OXYGEN_GPIO_DATA);
+    if (gpio & GPIO_XENSE_SPEAKERS)
+        value->value.enumerated.item[0] = 0;
+    else if (!(gpio & GPIO_XENSE_SPEAKERS) && (gpio & GPIO_XENSE_HP_REAR))
+        value->value.enumerated.item[0] = 1;
+    else
+        value->value.enumerated.item[0] = 2;
+    return 0;
+}
+
+static int xense_output_switch_put(struct snd_kcontrol *ctl,
+                struct snd_ctl_elem_value *value)
+{
+    struct oxygen *chip = ctl->private_data;
+    struct xonar_pcm179x *data = chip->model_data;
+    u16 gpio_old, gpio;
+
+    mutex_lock(&chip->mutex);
+    gpio_old = oxygen_read16(chip, OXYGEN_GPIO_DATA);
+    gpio = gpio_old;
+    switch (value->value.enumerated.item[0]) {
+    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, OXYGEN_GPIO_DATA, gpio);
+    data->hp_active = !(gpio & GPIO_XENSE_SPEAKERS);
+    update_pcm1796_volume(chip);
+    mutex_unlock(&chip->mutex);
+    return gpio != gpio_old;
+}
+
+static const struct snd_kcontrol_new xense_controls[] = {
+    {
+        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+        .name = "Analog Output",
+        .info = st_output_switch_info,
+        .get = xense_output_switch_get,
+        .put = xense_output_switch_put,
+    },
+    {
+        .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+        .name = "Headphones Impedance Playback Enum",
+        .info = st_hp_volume_offset_info,
+        .get = st_hp_volume_offset_get,
+        .put = st_hp_volume_offset_put,
+    },
+};
+
 static void xonar_line_mic_ac97_switch(struct oxygen *chip,
                        unsigned int reg, unsigned int mute)
 {
@@ -946,6 +1057,23 @@ static int xonar_st_mixer_init(struct oxygen *chip)
     return 0;
 }
 
+static int xonar_xense_mixer_init(struct oxygen *chip)
+{
+    unsigned int i;
+    int err;
+
+    for (i = 0; i < ARRAY_SIZE(xense_controls); ++i) {
+        err = snd_ctl_add(chip->card,
+                  snd_ctl_new1(&xense_controls[i], chip));
+        if (err < 0)
+            return err;
+    }
+    err = add_pcm1796_controls(chip);
+    if (err < 0)
+        return err;
+    return 0;
+}
+
 static void dump_pcm1796_registers(struct oxygen *chip,
                    struct snd_info_buffer *buffer)
 {
@@ -1138,6 +1266,13 @@ int get_xonar_pcm179x_model(struct oxygen *chip,
         chip->model.resume = xonar_stx_resume;
         chip->model.set_dac_params = set_pcm1796_params;
         break;
+    case 0x8428:
+        chip->model = model_xonar_st;
+        chip->model.shortname = "Xonar Xense";
+        chip->model.chip = "AV100";
+        chip->model.init = xonar_xense_init;
+        chip->model.mixer_init = xonar_xense_mixer_init;
+        break;
     default:
         return -EINVAL;
     }

Share this post


Link to post
Share on other sites
Posted (edited)

bump.



 



now that i have some free time on my hands, i hope to work on this some more.



i *think* it should show up as this:

 

Quote

 


Quote

 

 

 


 



    | | +-o AppleACPIPCI 
    | |   +-o ESI@0 
    | |   +-o IOU2@1 
    | |   | +-o IOPP 
    | |   |   +-o I2PS@0 
    | |   |     +-o IOPP 
    | |   |       +-o PPB2@2 
    | |   |       | +-o IOPP 
    | |   |       |   +-o PXS3@0 
    | |   |       |     +-o IOPP 
    | |   |       |       +-o pci13f6,8788@4 
    | |   |       +-o PPB4@4 
    | |   |         +-o IOPP 







 



 

 

 

 



this *looks* right but i could be wrong. however the card is now powered and this does not conflict with the video card stuff (i don't think the 580 has audio output, but i could be wrong):



  

 

 

 

 

 

Quote

 


Quote

 

 

 


| |   +-o IOU0@3 
    | |   | +-o IOPP 
    | |   |   +-o PXS1@0 
    | |   |   | +-o NVDAHal 
    | |   |   | +-o NVDAgl 
    | |   |   | +-o NVDA,Display-A@0 
    | |   |   | | +-o NVDA 
    | |   |   | |   +-o AppleMCCSControlModule 
    | |   |   | |   | +-o AppleMCCSParameterHandler 
    | |   |   | |   +-o AppleUpstreamUserClientDriver 
    | |   |   | |   +-o AGPM 
    | |   |   | |   | +-o gpu-control 
    | |   |   | |   |   +-o IOHWControl 
    | |   |   | |   +-o IOFramebufferI2CInterface 
    | |   |   | |   +-o display0 
    | |   |   | |   | +-o AppleDisplay 
    | |   |   | |   +-o IOFramebufferUserClient 
    | |   |   | |   +-o IOFramebufferSharedUserClient 
    | |   |   | +-o nvAccelerator 
    | |   |   | | +-o nv2DContext 
    | |   |   | | +-o nv2DContext 
    | |   |   | | +-o nvDevice 
    | |   |   | | +-o nvSharedUserClient 
    | |   |   | | +-o nvShareGroupContext 
    | |   |   | | +-o nvFermiGLContext 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvDevice 
    | |   |   | | +-o nvSharedUserClient 
    | |   |   | | +-o nvDevice 
    | |   |   | | +-o nvSharedUserClient 
    | |   |   | | +-o nvShareGroupContext 
    | |   |   | | +-o nvFermiGLContext 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvDevice 
    | |   |   | | +-o nvSharedUserClient 
    | |   |   | | +-o nvShareGroupContext 
    | |   |   | | +-o nvFermiGLContext 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvSurface 
    | |   |   | | +-o nvDevice 
    | |   |   | | +-o nvSharedUserClient 
    | |   |   | | +-o nvShareGroupContext 
    | |   |   | | +-o nvFermiGLContext 
    | |   |   | | +-o nvShareGroupContext 
    | |   |   | | +-o nvFermiGLContext 
    | |   |   | | +-o nvShareGroupContext 
    | |   |   | | +-o nvFermiGLContext 
    | |   |   | +-o NVDA,Display-B@1 
    | |   |   | | +-o NVDA 
    | |   |   | |   +-o AppleMCCSControlModule 
    | |   |   | |   | +-o AppleMCCSParameterHandler 
    | |   |   | |   +-o AppleUpstreamUserClientDriver 
    | |   |   | |   +-o IOFramebufferI2CInterface 
    | |   |   | |   +-o IOFramebufferUserClient 
    | |   |   | +-o NVDC 
    | |   |   | | +-o AppleGraphicsDeviceControlClient 
    | |   |   | +-o NVDAinitgl 
    | |   |   +-o PXS1@0,1 

 

 

 


 



it seems to me the xonar hdav1.3 is wrapping the PCI interface to PCI-E, which is not a surprise since the bandwidth requirements are typically within PCI spec.



again i could be wrong, but given the 8788 PCI and PXS1@0,1's IDs being consecutive (0x1000001f3 and 0x1000001f4, respectively), i think detection is right.



hopefully i can contribute something useful here... exciting area given that IOKit really has not been touched at the level necessary to contribute a proper CMI8788 driver.

progress is here

 

 

Edited by Broly
linking github for interested parties.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.



×