Mario Goebbels wrote:
> I've cleaned up the little hacking I've did here and there this week.
> The patch works against build 1015 (CDDL). Comments about code quality
> would be nice, since I'm jumping into cold water here in regards to
> writing C.

> +#define ASUS_VENDOR_ID       0x1043 // Is it?

It is.

> +/* Xonar specific */
> +#define XONAR_DX_FRONTDAC    0x9e
> +#define XONAR_DX_GPIO_OUTPUT 0x01
> ...
> +/* Xonar DX */
> +#define XONAR_DX_OUTPUT         0x0001
> +#define XONAR_ADDR_FRONT   0x9e

?

> +  /* Card model */
> +  int card_model;

I think you can use the model field for this purpose.

> +  /* Wait for it to stop being busy */
> +  while((INW(devc->osdev, TWO_WIRE_CTRL) & 0x1) && (count > 0))
> +  ...
>    MUTEX_ENTER_IRQDISABLE (devc->low_mutex, flags);

Waiting outside the mutex means that this functions isn't reentrant.

> +  oss_udelay(100);
> +
>    MUTEX_EXIT_IRQRESTORE (devc->low_mutex, flags);

Why is this wait inside the mutex?

I think it would be a better idea to wrap the entire function in a mutex
that doesn't disable interupts.

> +  // Left justified PCM (DAC and 8788 support I2S, but doesn't work).

How does it not work?

> +    /* SPI communication */
> +    bVal |= 0x80;

SPI is actually enabled by clearing bit 6.  Bit 7 enables SPI outputs 4
and 5.

> +      /* Must set master clock. */
> +      sDac |= 0x0010;

Please mention "256".

> +  /* Enable Xonar output */
> +  unsigned short output_enable;
> +  switch(devc->card_model)
> +  {
> +    case SUBID_XONAR_DX:
> +      output_enable = XONAR_DX_OUTPUT;
> +      break;
> +  }
> +  OUTW(devc->osdev, output_enable, GPIO_CONTROL);
> +  OUTW(devc->osdev, output_enable, GPIO_DATA);

output_enable is not initialized when the model is not a Xonar DX.


Regards,
Clemens
_______________________________________________
oss-devel mailing list
oss-devel@mailman.opensound.com
http://mailman.opensound.com/mailman/listinfo/oss-devel

Reply via email to