Lines Matching refs:priv
83 static inline void pic32_spi_enable(struct pic32_spi_priv *priv) in pic32_spi_enable() argument
85 writel(PIC32_SPI_CTRL_ON, &priv->regs->ctrl.set); in pic32_spi_enable()
88 static inline void pic32_spi_disable(struct pic32_spi_priv *priv) in pic32_spi_disable() argument
90 writel(PIC32_SPI_CTRL_ON, &priv->regs->ctrl.clr); in pic32_spi_disable()
93 static inline u32 pic32_spi_rx_fifo_level(struct pic32_spi_priv *priv) in pic32_spi_rx_fifo_level() argument
95 u32 sr = readl(&priv->regs->status.raw); in pic32_spi_rx_fifo_level()
100 static inline u32 pic32_spi_tx_fifo_level(struct pic32_spi_priv *priv) in pic32_spi_tx_fifo_level() argument
102 u32 sr = readl(&priv->regs->status.raw); in pic32_spi_tx_fifo_level()
108 static u32 pic32_tx_max(struct pic32_spi_priv *priv, int n_bytes) in pic32_tx_max() argument
112 tx_left = (priv->tx_end - priv->tx) / n_bytes; in pic32_tx_max()
113 tx_room = priv->fifo_n_word - pic32_spi_tx_fifo_level(priv); in pic32_tx_max()
115 rxtx_gap = (priv->rx_end - priv->rx) - (priv->tx_end - priv->tx); in pic32_tx_max()
117 return min3(tx_left, tx_room, (u32)(priv->fifo_n_word - rxtx_gap)); in pic32_tx_max()
121 static u32 pic32_rx_max(struct pic32_spi_priv *priv, int n_bytes) in pic32_rx_max() argument
123 u32 rx_left = (priv->rx_end - priv->rx) / n_bytes; in pic32_rx_max()
125 return min_t(u32, rx_left, pic32_spi_rx_fifo_level(priv)); in pic32_rx_max()
129 static void pic32_spi_rx_##__name(struct pic32_spi_priv *priv) \
132 u32 mx = pic32_rx_max(priv, sizeof(__type)); \
135 val = read##__bwl(&priv->regs->buf.raw); \
136 if (priv->rx_end - priv->len) \
137 *(__type *)(priv->rx) = val; \
138 priv->rx += sizeof(__type); \
142 static void pic32_spi_tx_##__name(struct pic32_spi_priv *priv) \
145 u32 mx = pic32_tx_max(priv, sizeof(__type)); \
149 if (priv->tx_end - priv->len) \
150 val = *(__type *)(priv->tx); \
151 write##__bwl(val, &priv->regs->buf.raw); \
152 priv->tx += sizeof(__type); \
159 static int pic32_spi_set_word_size(struct pic32_spi_priv *priv, in pic32_spi_set_word_size() argument
167 priv->rx_fifo = pic32_spi_rx_byte; in pic32_spi_set_word_size()
168 priv->tx_fifo = pic32_spi_tx_byte; in pic32_spi_set_word_size()
172 priv->rx_fifo = pic32_spi_rx_word; in pic32_spi_set_word_size()
173 priv->tx_fifo = pic32_spi_tx_word; in pic32_spi_set_word_size()
177 priv->rx_fifo = pic32_spi_rx_dword; in pic32_spi_set_word_size()
178 priv->tx_fifo = pic32_spi_tx_dword; in pic32_spi_set_word_size()
187 val = readl(&priv->regs->ctrl.raw); in pic32_spi_set_word_size()
190 writel(val, &priv->regs->ctrl.raw); in pic32_spi_set_word_size()
193 priv->fifo_n_word = DIV_ROUND_UP(priv->fifo_depth, wordlen / 8); in pic32_spi_set_word_size()
200 struct pic32_spi_priv *priv = dev_get_priv(slave->parent); in pic32_spi_claim_bus() local
203 pic32_spi_enable(priv); in pic32_spi_claim_bus()
210 struct pic32_spi_priv *priv = dev_get_priv(slave->parent); in pic32_spi_release_bus() local
213 pic32_spi_disable(priv); in pic32_spi_release_bus()
218 static void spi_cs_activate(struct pic32_spi_priv *priv) in spi_cs_activate() argument
220 if (!dm_gpio_is_valid(&priv->cs_gpio)) in spi_cs_activate()
223 dm_gpio_set_value(&priv->cs_gpio, 1); in spi_cs_activate()
226 static void spi_cs_deactivate(struct pic32_spi_priv *priv) in spi_cs_deactivate() argument
228 if (!dm_gpio_is_valid(&priv->cs_gpio)) in spi_cs_deactivate()
231 dm_gpio_set_value(&priv->cs_gpio, 0); in spi_cs_deactivate()
240 struct pic32_spi_priv *priv; in pic32_spi_xfer() local
245 priv = dev_get_priv(bus); in pic32_spi_xfer()
255 spi_cs_activate(priv); in pic32_spi_xfer()
258 priv->tx = tx_buf; in pic32_spi_xfer()
259 priv->rx = rx_buf; in pic32_spi_xfer()
260 priv->tx_end = priv->tx + len; in pic32_spi_xfer()
261 priv->rx_end = priv->rx + len; in pic32_spi_xfer()
262 priv->len = len; in pic32_spi_xfer()
267 priv->tx_fifo(priv); in pic32_spi_xfer()
268 priv->rx_fifo(priv); in pic32_spi_xfer()
271 if (priv->rx >= priv->rx_end) { in pic32_spi_xfer()
286 spi_cs_deactivate(priv); in pic32_spi_xfer()
293 struct pic32_spi_priv *priv = dev_get_priv(bus); in pic32_spi_set_speed() local
299 div = (priv->clk_rate / 2 / speed) - 1; in pic32_spi_set_speed()
301 writel(div, &priv->regs->baud.raw); in pic32_spi_set_speed()
303 priv->speed_hz = speed; in pic32_spi_set_speed()
310 struct pic32_spi_priv *priv = dev_get_priv(bus); in pic32_spi_set_mode() local
316 val = readl(&priv->regs->ctrl.raw); in pic32_spi_set_mode()
331 writel(val, &priv->regs->ctrl.raw); in pic32_spi_set_mode()
333 priv->mode = mode; in pic32_spi_set_mode()
340 struct pic32_spi_priv *priv = dev_get_priv(slave->parent); in pic32_spi_set_wordlen() local
342 return pic32_spi_set_word_size(priv, wordlen); in pic32_spi_set_wordlen()
345 static void pic32_spi_hw_init(struct pic32_spi_priv *priv) in pic32_spi_hw_init() argument
350 pic32_spi_disable(priv); in pic32_spi_hw_init()
352 val = readl(&priv->regs->ctrl); in pic32_spi_hw_init()
356 priv->fifo_depth = 16; in pic32_spi_hw_init()
370 writel(val, &priv->regs->ctrl); in pic32_spi_hw_init()
373 writel(PIC32_SPI_STAT_RX_OV, &priv->regs->status.clr); in pic32_spi_hw_init()
378 struct pic32_spi_priv *priv = dev_get_priv(bus); in pic32_spi_probe() local
391 priv->regs = ioremap(addr, size); in pic32_spi_probe()
392 if (!priv->regs) in pic32_spi_probe()
403 priv->clk_rate = clk_get_periph_rate(clkdev, ret); in pic32_spi_probe()
406 pic32_spi_hw_init(priv); in pic32_spi_probe()
409 pic32_spi_set_word_size(priv, SPI_DEFAULT_WORDLEN); in pic32_spi_probe()
418 &priv->cs_gpio, GPIOD_IS_OUT); in pic32_spi_probe()