NFC: trf7970a: Set 'Modulator and SYS_CLK Control' after 'ISO Control'
authorMark A. Greer <mgreer@animalcreek.com>
Tue, 25 Mar 2014 15:54:34 +0000 (08:54 -0700)
committerSamuel Ortiz <sameo@linux.intel.com>
Mon, 21 Apr 2014 22:37:27 +0000 (00:37 +0200)
Writing to the 'ISO Control' register may cause the contents of the
'Modulator and SYS_CLK Control' register to change so be sure to write
to 'Modulator and SYS_CLK Control' after writing to 'ISO Control'.

Note that writing to the 'Modulator and SYS_CLK Control' register
shouldn't be necessary at all according to the trf790a manual but testing
shows that it is necessary.

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/trf7970a.c

index d17d424..90ec2ad 100644 (file)
@@ -765,11 +765,6 @@ static int trf7970a_init(struct trf7970a *trf)
        if (ret)
                goto err_out;
 
-       ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
-                       TRF7970A_MODULATOR_DEPTH_OOK);
-       if (ret)
-               goto err_out;
-
        ret = trf7970a_write(trf, TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS,
                        TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96 |
                        TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32);
@@ -943,6 +938,11 @@ static int trf7970a_config_framing(struct trf7970a *trf, int framing)
                        return ret;
 
                trf->iso_ctrl = iso_ctrl;
+
+               ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
+                               TRF7970A_MODULATOR_DEPTH_OOK);
+               if (ret)
+                       return ret;
        }
 
        return 0;