333,6 → 333,64 |
dprintk("suspend modulation w/ clock speed: %d kHz.\n", freqs.new); |
} |
|
|
void gx_force_values(unsigned char on_duration, unsigned char off_duration) { |
|
u8 suscfg, pmer1; |
unsigned long flags; |
|
if (off_duration == 0) { /* 100% of CPU speed, it is special case */ |
local_irq_save(flags); |
pci_write_config_byte(gx_params->cs55x0, PCI_SUSCFG, (gx_params->pci_suscfg & ~(SUSMOD))); |
pci_read_config_byte(gx_params->cs55x0, PCI_SUSCFG, &(gx_params->pci_suscfg)); |
local_irq_restore(flags); |
dprintk("suspend modulation disabled: cpu runs 100 percent speed.\n"); |
return; |
} |
|
local_irq_save(flags); |
switch (gx_params->cs55x0->device) { |
case PCI_DEVICE_ID_CYRIX_5530_LEGACY: |
pmer1 = gx_params->pci_pmer1 | IRQ_SPDUP | VID_SPDUP; |
/* FIXME: need to test other values -- Zwane,Miura */ |
pci_write_config_byte(gx_params->cs55x0, PCI_IRQTC, 4); /* typical 2 to 4ms */ |
pci_write_config_byte(gx_params->cs55x0, PCI_VIDTC, 100);/* typical 50 to 100ms */ |
pci_write_config_byte(gx_params->cs55x0, PCI_PMER1, pmer1); |
|
if (gx_params->pci_rev < 0x10) { /* CS5530(rev 1.2, 1.3) */ |
suscfg = gx_params->pci_suscfg | SUSMOD; |
} else { /* CS5530A,B.. */ |
suscfg = gx_params->pci_suscfg | SUSMOD | PWRSVE; |
} |
break; |
case PCI_DEVICE_ID_CYRIX_5520: |
case PCI_DEVICE_ID_CYRIX_5510: |
suscfg = gx_params->pci_suscfg | SUSMOD; |
break; |
default: |
local_irq_restore(flags); |
dprintk("fatal: try to set unknown chipset.\n"); |
return; |
} |
|
gx_params->off_duration = off_duration; |
gx_params->on_duration = on_duration; |
|
pci_write_config_byte(gx_params->cs55x0, PCI_MODOFF, gx_params->off_duration); |
pci_write_config_byte(gx_params->cs55x0, PCI_MODON, gx_params->on_duration); |
|
pci_write_config_byte(gx_params->cs55x0, PCI_SUSCFG, suscfg); |
pci_read_config_byte(gx_params->cs55x0, PCI_SUSCFG, &suscfg); |
|
local_irq_restore(flags); |
|
gx_params->pci_suscfg = suscfg; |
|
dprintk("suspend modulation w/ duration of ON:%d us, OFF:%d us\n", |
gx_params->on_duration * 32, gx_params->off_duration * 32); |
|
} |
|
/**************************************************************** |
* High level functions * |
****************************************************************/ |