|
@@ -215,7 +215,52 @@ static int fsi_slave_report_and_clear_errors(struct fsi_slave *slave)
|
|
&irq, sizeof(irq));
|
|
&irq, sizeof(irq));
|
|
}
|
|
}
|
|
|
|
|
|
-static int fsi_slave_set_smode(struct fsi_master *master, int link, int id);
|
|
|
|
|
|
+/* Encode slave local bus echo delay */
|
|
|
|
+static inline uint32_t fsi_smode_echodly(int x)
|
|
|
|
+{
|
|
|
|
+ return (x & FSI_SMODE_ED_MASK) << FSI_SMODE_ED_SHIFT;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* Encode slave local bus send delay */
|
|
|
|
+static inline uint32_t fsi_smode_senddly(int x)
|
|
|
|
+{
|
|
|
|
+ return (x & FSI_SMODE_SD_MASK) << FSI_SMODE_SD_SHIFT;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* Encode slave local bus clock rate ratio */
|
|
|
|
+static inline uint32_t fsi_smode_lbcrr(int x)
|
|
|
|
+{
|
|
|
|
+ return (x & FSI_SMODE_LBCRR_MASK) << FSI_SMODE_LBCRR_SHIFT;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* Encode slave ID */
|
|
|
|
+static inline uint32_t fsi_smode_sid(int x)
|
|
|
|
+{
|
|
|
|
+ return (x & FSI_SMODE_SID_MASK) << FSI_SMODE_SID_SHIFT;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static uint32_t fsi_slave_smode(int id)
|
|
|
|
+{
|
|
|
|
+ return FSI_SMODE_WSC | FSI_SMODE_ECRC
|
|
|
|
+ | fsi_smode_sid(id)
|
|
|
|
+ | fsi_smode_echodly(0xf) | fsi_smode_senddly(0xf)
|
|
|
|
+ | fsi_smode_lbcrr(0x8);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int fsi_slave_set_smode(struct fsi_master *master, int link, int id)
|
|
|
|
+{
|
|
|
|
+ uint32_t smode;
|
|
|
|
+ __be32 data;
|
|
|
|
+
|
|
|
|
+ /* set our smode register with the slave ID field to 0; this enables
|
|
|
|
+ * extended slave addressing
|
|
|
|
+ */
|
|
|
|
+ smode = fsi_slave_smode(id);
|
|
|
|
+ data = cpu_to_be32(smode);
|
|
|
|
+
|
|
|
|
+ return fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SMODE,
|
|
|
|
+ &data, sizeof(data));
|
|
|
|
+}
|
|
|
|
|
|
static int fsi_slave_handle_error(struct fsi_slave *slave, bool write,
|
|
static int fsi_slave_handle_error(struct fsi_slave *slave, bool write,
|
|
uint32_t addr, size_t size)
|
|
uint32_t addr, size_t size)
|
|
@@ -563,53 +608,6 @@ static const struct bin_attribute fsi_slave_term_attr = {
|
|
.write = fsi_slave_sysfs_term_write,
|
|
.write = fsi_slave_sysfs_term_write,
|
|
};
|
|
};
|
|
|
|
|
|
-/* Encode slave local bus echo delay */
|
|
|
|
-static inline uint32_t fsi_smode_echodly(int x)
|
|
|
|
-{
|
|
|
|
- return (x & FSI_SMODE_ED_MASK) << FSI_SMODE_ED_SHIFT;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* Encode slave local bus send delay */
|
|
|
|
-static inline uint32_t fsi_smode_senddly(int x)
|
|
|
|
-{
|
|
|
|
- return (x & FSI_SMODE_SD_MASK) << FSI_SMODE_SD_SHIFT;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* Encode slave local bus clock rate ratio */
|
|
|
|
-static inline uint32_t fsi_smode_lbcrr(int x)
|
|
|
|
-{
|
|
|
|
- return (x & FSI_SMODE_LBCRR_MASK) << FSI_SMODE_LBCRR_SHIFT;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/* Encode slave ID */
|
|
|
|
-static inline uint32_t fsi_smode_sid(int x)
|
|
|
|
-{
|
|
|
|
- return (x & FSI_SMODE_SID_MASK) << FSI_SMODE_SID_SHIFT;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static uint32_t fsi_slave_smode(int id)
|
|
|
|
-{
|
|
|
|
- return FSI_SMODE_WSC | FSI_SMODE_ECRC
|
|
|
|
- | fsi_smode_sid(id)
|
|
|
|
- | fsi_smode_echodly(0xf) | fsi_smode_senddly(0xf)
|
|
|
|
- | fsi_smode_lbcrr(0x8);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int fsi_slave_set_smode(struct fsi_master *master, int link, int id)
|
|
|
|
-{
|
|
|
|
- uint32_t smode;
|
|
|
|
- __be32 data;
|
|
|
|
-
|
|
|
|
- /* set our smode register with the slave ID field to 0; this enables
|
|
|
|
- * extended slave addressing
|
|
|
|
- */
|
|
|
|
- smode = fsi_slave_smode(id);
|
|
|
|
- data = cpu_to_be32(smode);
|
|
|
|
-
|
|
|
|
- return fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SMODE,
|
|
|
|
- &data, sizeof(data));
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void fsi_slave_release(struct device *dev)
|
|
static void fsi_slave_release(struct device *dev)
|
|
{
|
|
{
|
|
struct fsi_slave *slave = to_fsi_slave(dev);
|
|
struct fsi_slave *slave = to_fsi_slave(dev);
|