Lines Matching refs:rcan
130 static void rockchip_can_write_cmdreg(struct rockchip_can *rcan, u8 val) in rockchip_can_write_cmdreg() argument
132 writel(val, rcan->base + CAN_CMD); in rockchip_can_write_cmdreg()
137 struct rockchip_can *rcan = netdev_priv(ndev); in set_reset_mode() local
139 reset_control_assert(rcan->reset); in set_reset_mode()
141 reset_control_deassert(rcan->reset); in set_reset_mode()
143 writel(0, rcan->base + CAN_MODE); in set_reset_mode()
150 struct rockchip_can *rcan = netdev_priv(ndev); in set_normal_mode() local
153 val = readl(rcan->base + CAN_MODE); in set_normal_mode()
155 writel(val, rcan->base + CAN_MODE); in set_normal_mode()
163 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_set_bittiming() local
164 struct can_bittiming *bt = &rcan->can.bittiming; in rockchip_can_set_bittiming()
171 if (rcan->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES) in rockchip_can_set_bittiming()
174 writel(cfg, rcan->base + CAN_BTT); in rockchip_can_set_bittiming()
185 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_get_berr_counter() local
188 err = pm_runtime_get_sync(rcan->dev); in rockchip_can_get_berr_counter()
195 bec->rxerr = readl(rcan->base + CAN_RX_ERR_CNT); in rockchip_can_get_berr_counter()
196 bec->txerr = readl(rcan->base + CAN_TX_ERR_CNT); in rockchip_can_get_berr_counter()
198 pm_runtime_put(rcan->dev); in rockchip_can_get_berr_counter()
206 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_start() local
211 writel(0, rcan->base + CAN_INT_MASK); in rockchip_can_start()
214 writel(0, rcan->base + CAN_ID); in rockchip_can_start()
215 writel(CAN_RX_FILTER_MASK, rcan->base + CAN_ID_MASK); in rockchip_can_start()
221 rcan->can.state = CAN_STATE_ERROR_ACTIVE; in rockchip_can_start()
229 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_stop() local
232 rcan->can.state = CAN_STATE_STOPPED; in rockchip_can_stop()
241 writel(val, rcan->base + CAN_INT_MASK); in rockchip_can_stop()
277 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_start_xmit() local
301 rockchip_can_write_cmdreg(rcan, 0); in rockchip_can_start_xmit()
303 writel(id & CAN_TX_ID_MASK, rcan->base + CAN_TX_ID); in rockchip_can_start_xmit()
307 writel(data1, rcan->base + CAN_TX_DATA1); in rockchip_can_start_xmit()
308 writel(data2, rcan->base + CAN_TX_DATA2); in rockchip_can_start_xmit()
311 writel(fi, rcan->base + CAN_TX_FRM_INFO); in rockchip_can_start_xmit()
314 rockchip_can_write_cmdreg(rcan, TX_REQ); in rockchip_can_start_xmit()
316 cf->can_id, cf->can_dlc, rcan->can.ctrlmode, data1, data2); in rockchip_can_start_xmit()
323 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_rx() local
336 fi = readl(rcan->base + CAN_RX_FRM_INFO); in rockchip_can_rx()
338 id = readl(rcan->base + CAN_RX_ID); in rockchip_can_rx()
346 data1 = readl(rcan->base + CAN_RX_DATA1); in rockchip_can_rx()
347 data2 = readl(rcan->base + CAN_RX_DATA2); in rockchip_can_rx()
365 static void rockchip_can_clean_rx_info(struct rockchip_can *rcan) in rockchip_can_clean_rx_info() argument
367 readl(rcan->base + CAN_RX_FRM_INFO); in rockchip_can_clean_rx_info()
368 readl(rcan->base + CAN_RX_ID); in rockchip_can_clean_rx_info()
369 readl(rcan->base + CAN_RX_DATA1); in rockchip_can_clean_rx_info()
370 readl(rcan->base + CAN_RX_DATA2); in rockchip_can_clean_rx_info()
375 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_err() local
377 enum can_state state = rcan->can.state; in rockchip_can_err()
387 rxerr = readl(rcan->base + CAN_RX_ERR_CNT); in rockchip_can_err()
388 txerr = readl(rcan->base + CAN_TX_ERR_CNT); in rockchip_can_err()
389 sta_reg = readl(rcan->base + CAN_STATE); in rockchip_can_err()
428 rcan->can.can_stats.bus_error++; in rockchip_can_err()
432 ecc = readl(rcan->base + CAN_ERR_CODE); in rockchip_can_err()
467 alc = readl(rcan->base + CAN_LOSTARB_CODE); in rockchip_can_err()
468 rcan->can.can_stats.arbitration_lost++; in rockchip_can_err()
476 if (state != rcan->can.state) { in rockchip_can_err()
483 rcan->can.state = state; in rockchip_can_err()
502 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_interrupt() local
508 isr = readl(rcan->base + CAN_INT); in rockchip_can_interrupt()
511 stats->tx_bytes += readl(rcan->base + CAN_TX_FRM_INFO) & in rockchip_can_interrupt()
514 rockchip_can_write_cmdreg(rcan, 0); in rockchip_can_interrupt()
524 rockchip_can_clean_rx_info(rcan); in rockchip_can_interrupt()
529 writel(isr, rcan->base + CAN_INT); in rockchip_can_interrupt()
530 rockchip_can_clean_rx_info(rcan); in rockchip_can_interrupt()
537 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_open() local
545 err = pm_runtime_get_sync(rcan->dev); in rockchip_can_open()
565 pm_runtime_put(rcan->dev); in rockchip_can_open()
573 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_close() local
579 pm_runtime_put(rcan->dev); in rockchip_can_close()
653 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_runtime_suspend() local
655 clk_bulk_disable_unprepare(rcan->num_clks, rcan->clks); in rockchip_can_runtime_suspend()
670 struct rockchip_can *rcan = netdev_priv(ndev); in rockchip_can_runtime_resume() local
673 ret = clk_bulk_prepare_enable(rcan->num_clks, rcan->clks); in rockchip_can_runtime_resume()
697 struct rockchip_can *rcan; in rockchip_can_probe() local
723 rcan = netdev_priv(ndev); in rockchip_can_probe()
733 rcan->reset = devm_reset_control_array_get(&pdev->dev, false, false); in rockchip_can_probe()
734 if (IS_ERR(rcan->reset)) { in rockchip_can_probe()
735 if (PTR_ERR(rcan->reset) != -EPROBE_DEFER) in rockchip_can_probe()
737 return PTR_ERR(rcan->reset); in rockchip_can_probe()
740 rcan->num_clks = devm_clk_bulk_get_all(&pdev->dev, &rcan->clks); in rockchip_can_probe()
741 if (rcan->num_clks < 1) { in rockchip_can_probe()
746 rcan->dev = &pdev->dev; in rockchip_can_probe()
747 rcan->can.clock.freq = clk_get_rate(rcan->clks[0].clk); in rockchip_can_probe()
748 rcan->can.bittiming_const = &rockchip_can_bittiming_const; in rockchip_can_probe()
749 rcan->can.do_set_mode = rockchip_can_set_mode; in rockchip_can_probe()
750 rcan->can.do_get_berr_counter = rockchip_can_get_berr_counter; in rockchip_can_probe()
751 rcan->can.ctrlmode_supported = CAN_CTRLMODE_BERR_REPORTING | in rockchip_can_probe()
755 rcan->base = addr; in rockchip_can_probe()