Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Sep 1997 22:08:44 -0700 (PDT)
From:      <nsayer@quack.kfu.com>
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   kern/4650: Cirrus Logic pcic chips need audio bit & LPDM bit set.
Message-ID:  <199709290508.WAA09986@icarus.kfu.com>
Resent-Message-ID: <199709290510.WAA16935@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         4650
>Category:       kern
>Synopsis:       Cirrus Logic pcic chips need audio bit & LPDM bit set
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Class:          support
>Submitter-Id:   current-users
>Arrival-Date:   Sun Sep 28 22:10:00 PDT 1997
>Last-Modified:
>Originator:     Nick Sayer
>Organization:
>Release:        FreeBSD 2.2.2-RELEASE i386
>Environment:

Laptops (or desktops) with Cirrus Logic PD672x chipsets.

>Description:

PCMCIA modem cards send the speaker audio (dialing noises) to the
host to be sent to the speaker. Cirrus Logic PCIC chips have a
bit to enable or disable this, and it is disabled by default.

There is also a Low Power Dynamic Mode bit (this one is one per
chip rather than one per slot, but it doesn't hurt to set it per
slot - extras are ignored) that the docco claims will reduce PCIC
power consumption by 30% or so. I have seen no ill effects from
turning this bit on.

>How-To-Repeat:

>Fix:
	

*** pcic.c.orig	Sun Jul  6 09:11:53 1997
--- pcic.c	Sun Jul  6 10:19:03 1997
***************
*** 949,954 ****
--- 949,961 ----
  				printf("pcic: controller irq %d\n", pcic_irq);
  		}
  #endif	/* PCIC_NO_IRQ */
+ #ifndef NOCIRRUSHACK
+ 		if (sp->controller == PCIC_PD672X)
+ 		{
+ 			setb (sp, PCIC_MISC1, PCIC_SPKR_EN);
+ 			setb (sp, PCIC_MISC2, PCIC_LPDM_EN);
+ 		}
+ #endif
  		/*
  		 *	Check for a card in this slot.
  		 */
***************
*** 1331,1334 ****
--- 1338,1348 ----
  
  	if (pcic_irq > 0)
  		sp->putb(sp, PCIC_STAT_INT, (pcic_irq << 4) | 0xF);
+ #ifndef NOCIRRUSHACK
+ 	if (sp->controller == PCIC_PD672X)
+ 	{
+ 		setb (sp, PCIC_MISC1, PCIC_SPKR_EN);
+ 		setb (sp, PCIC_MISC2, PCIC_LPDM_EN);
+ 	}
+ #endif
  }
*** i82365.h.orig	Sun Jul  6 09:11:52 1997
--- i82365.h	Sun Jul  6 09:15:04 1997
***************
*** 84,90 ****
--- 84,92 ----
  #define PCIC_IO1	0x0c	/* I/O Address 1 */
  #define	PCIC_MEMBASE	0x10	/* Base of memory window registers */
  #define PCIC_CDGC	0x16	/* Card Detect and General Control */
+ #define PCIC_MISC1	0x16	/* PD672x: Misc control register 1 per slot */
  #define PCIC_GLO_CTRL	0x1e	/* Global Control Register */
+ #define PCIC_MISC2	0x1e	/* PD672x: Misc control register 2 per chip */
  
  #define	PCIC_TIME_SETUP0	0x3a
  #define	PCIC_TIME_CMD0		0x3b
***************
*** 205,210 ****
--- 207,215 ----
  #define PCIC_CDRES_EN	0x10	/* card detect resume enable */
  #define PCIC_SW_CD_INT	0x20	/* s/w card detect interrupt */
  
+ /* For Misc. Control Register 1 */
+ #define PCIC_SPKR_EN	0x10	/* Cirrus PD672x: speaker enable */
+ 
  /* For Global Control register (PCIC_GLO_CTRL) */
  #define PCIC_PWR_DOWN	0x01	/* power down */
  #define PCIC_LVL_MODE	0x02	/* level mode interrupt enable */
***************
*** 212,217 ****
--- 217,224 ----
  #define PCIC_IRQ0_LEVEL 0x08	/* irq 14 pulse mode enable */
  #define PCIC_IRQ1_LEVEL 0x10
  
+ /* For Misc. Control Register 2 */
+ #define PCIC_LPDM_EN	0x02	/* Cirrus PD672x: low power dynamic mode */
  /*
   *	Mask of allowable interrupts.
   *	Ints are 3,4,5,7,9,10,11,12,14,15
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199709290508.WAA09986>