162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */
262306a36Sopenharmony_ci/* Header File for Loongson SPI Driver. */
362306a36Sopenharmony_ci/* Copyright (C) 2023 Loongson Technology Corporation Limited */
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifndef __LINUX_SPI_LOONGSON_H
662306a36Sopenharmony_ci#define __LINUX_SPI_LOONGSON_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/bits.h>
962306a36Sopenharmony_ci#include <linux/pm.h>
1062306a36Sopenharmony_ci#include <linux/types.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define	LOONGSON_SPI_SPCR_REG	0x00
1362306a36Sopenharmony_ci#define	LOONGSON_SPI_SPSR_REG	0x01
1462306a36Sopenharmony_ci#define	LOONGSON_SPI_FIFO_REG	0x02
1562306a36Sopenharmony_ci#define	LOONGSON_SPI_SPER_REG	0x03
1662306a36Sopenharmony_ci#define	LOONGSON_SPI_PARA_REG	0x04
1762306a36Sopenharmony_ci#define	LOONGSON_SPI_SFCS_REG	0x05
1862306a36Sopenharmony_ci#define	LOONGSON_SPI_TIMI_REG	0x06
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/* Bits definition for Loongson SPI register */
2162306a36Sopenharmony_ci#define	LOONGSON_SPI_PARA_MEM_EN	BIT(0)
2262306a36Sopenharmony_ci#define	LOONGSON_SPI_SPCR_CPHA	BIT(2)
2362306a36Sopenharmony_ci#define	LOONGSON_SPI_SPCR_CPOL	BIT(3)
2462306a36Sopenharmony_ci#define	LOONGSON_SPI_SPCR_SPE	BIT(6)
2562306a36Sopenharmony_ci#define	LOONGSON_SPI_SPSR_RFEMPTY	BIT(0)
2662306a36Sopenharmony_ci#define	LOONGSON_SPI_SPSR_WCOL	BIT(6)
2762306a36Sopenharmony_ci#define	LOONGSON_SPI_SPSR_SPIF	BIT(7)
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct device;
3062306a36Sopenharmony_cistruct spi_controller;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct loongson_spi {
3362306a36Sopenharmony_ci	struct	spi_controller	*controller;
3462306a36Sopenharmony_ci	void __iomem		*base;
3562306a36Sopenharmony_ci	int			cs_active;
3662306a36Sopenharmony_ci	unsigned int		hz;
3762306a36Sopenharmony_ci	unsigned char		spcr;
3862306a36Sopenharmony_ci	unsigned char		sper;
3962306a36Sopenharmony_ci	unsigned char		spsr;
4062306a36Sopenharmony_ci	unsigned char		para;
4162306a36Sopenharmony_ci	unsigned char		sfcs;
4262306a36Sopenharmony_ci	unsigned char		timi;
4362306a36Sopenharmony_ci	unsigned int		mode;
4462306a36Sopenharmony_ci	u64			clk_rate;
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciint loongson_spi_init_controller(struct device *dev, void __iomem *reg);
4862306a36Sopenharmony_ciextern const struct dev_pm_ops loongson_spi_dev_pm_ops;
4962306a36Sopenharmony_ci#endif /* __LINUX_SPI_LOONGSON_H */
50