firewire: add CSR CYCLE_TIME write support
authorClemens Ladisch <clemens@ladisch.de>
Thu, 10 Jun 2010 06:26:48 +0000 (08:26 +0200)
committerClemens Ladisch <clemens@ladisch.de>
Thu, 10 Jun 2010 06:26:48 +0000 (08:26 +0200)
The specification requires that CYCLE_TIME is writable so that it can be
initialized, so we better implement it.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
drivers/firewire/core-transaction.c
drivers/firewire/ohci.c

index 9a7d3ec..e3925f6 100644 (file)
@@ -1097,6 +1097,9 @@ static void handle_registers(struct fw_card *card, struct fw_request *request,
                if (TCODE_IS_READ_REQUEST(tcode) && length == 4)
                        *data = cpu_to_be32(card->driver->
                                        read_csr_reg(card, CSR_CYCLE_TIME));
+               else if (tcode == TCODE_WRITE_QUADLET_REQUEST)
+                       card->driver->write_csr_reg(card, CSR_CYCLE_TIME,
+                                                   be32_to_cpu(*data));
                else
                        rcode = RCODE_TYPE_ERROR;
                break;
index a55fbbc..777811a 100644 (file)
@@ -1996,6 +1996,13 @@ static void ohci_write_csr_reg(struct fw_card *card, int csr_offset, u32 value)
                flush_writes(ohci);
                break;
 
+       case CSR_CYCLE_TIME:
+               reg_write(ohci, OHCI1394_IsochronousCycleTimer, value);
+               reg_write(ohci, OHCI1394_IntEventSet,
+                         OHCI1394_cycleInconsistent);
+               flush_writes(ohci);
+               break;
+
        default:
                WARN_ON(1);
                break;