pata_hpt3x2n: fix clock turnaround
authorSergei Shtylyov <sshtylyov@ru.mvista.com>
Thu, 17 Dec 2009 06:11:27 +0000 (01:11 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 6 Jan 2010 23:03:22 +0000 (15:03 -0800)
commitf31733a7aa32257dac6390f080814a7f76b419bf
treee4fdb9164f196d685be8e2bf87d06660329eb399
parentfa3f5a5c1c8e6a2cbc7e21755ea7c215f8cf0577
pata_hpt3x2n: fix clock turnaround

commit 256ace9bbd4cdb6d48d5f55d55d42fa20527fad1 upstream.

The clock turnaround code still doesn't work for several reasons:

- 'USE_DPLL' flag in 'ap->host->private_data' is never initialized
  or updated, so the driver can only set the chip to the DPLL clock
  mode, not the PCI mode;

- the driver doesn't serialize access to the channels depending on
  the current clock mode like the vendor drivers, so the clock
  turnaround is only executed "optionally", not always as it should be;

- the wrong ports are written to when hpt3x2n_set_clock() is called
  for the secondary channel;

- hpt3x2n_set_clock() can inadvertently enable the disabled channels
  when resetting the channel state machines.

Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/ata/pata_hpt3x2n.c