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 9a7d3ec23f2bb914113b85cdfd2bd26a7042df38..e3925f67ec12aaa566f963d30ab7540e1c7fe311 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 a55fbbce9e79785bd015c07db5988005757184d5..777811a736b2cd146fe4626d0f8f8c931bd4da04 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;