blob: 9c2dc1e6d89416a2348e83ae8ad146eeb6626b6c [file] [log] [blame]
/*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Description:
*/
#ifndef __AML_SPI_H_
#define __AML_SPI_H_
//#include <linux/amlogic/aml_gpio_consumer.h>
#include <linux/gpio/consumer.h>
#include "aml_pcmcia.h"
#include "aml_ci.h"
#include "dvb_ca_en50221.h"
/*
aml spi dev
*/
struct aml_spi {
spinlock_t spi_lock;
/* add SPI DEV */
struct spi_board_info *spi_bdinfo;
struct spi_device *spi;
struct platform_device *pdev;
struct device *dev;
/* spi otherconfig */
int cs_hold_delay;
int cs_clk_delay;
int write_check;
/* add gpio pin */
struct gpio_desc *reset_pin;
int reset_pin_value;
struct gpio_desc *cd_pin1;
int cd_pin1_value;
struct gpio_desc *cd_pin2;
int cd_pin2_value;
struct gpio_desc *pwr_pin;
int pwr_pin_value;
/* cam and mcu irq */
struct gpio_desc *irq_cam_pin;
int irq_cam_pin_value;
int irq;
struct aml_pcmcia pc;
void *priv;
/*for AML_DVB_IO_TYPE_SPI_T312 device*/
struct gpio_desc *mcu_irq_pin;
int mcu_irq_pin_value;
/*device type*/
int io_device_type;
};
/* used to mcu */
#define DATASTART 0xef
#define DATAEND 0xfe
enum AM_SPI_RECIVERSTEP {
AM_SPI_STEP_INIT = 0,
AM_SPI_STEP_START1,
AM_SPI_STEP_START2,
AM_SPI_STEP_CMD,
AM_SPI_STEP_DATA,
AM_SPI_STEP_ADDR1,
AM_SPI_STEP_ADDR2,
AM_SPI_STEP_END1,
AM_SPI_STEP_END2
};
enum AM_CON_GPIO
{
AM_CONGPIO_SEL_LVDS = 0,
AM_CONGPIO_SCN_EN,
AM_CONGPIO_LD_EN2,
AM_CONGPIO_2D3D,
AM_CONGPIO_AMP_RST,
};
extern int dirspi_xfer(struct spi_device *spi, u8 *tx_buf, u8 *rx_buf,
int len);
extern int dirspi_write(struct spi_device *spi, u8 *buf, int len);
extern int dirspi_read(struct spi_device *spi, u8 *buf, int len);
extern void dirspi_start(struct spi_device *spi);
extern void dirspi_stop(struct spi_device *spi);
extern int dirspi_register_board_info(struct spi_board_info const *info, unsigned n);
extern void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221 *pubca, int slot);
extern int aml_spi_init(struct platform_device *pdev, struct aml_ci *ci_dev);
extern int aml_spi_exit(struct aml_ci *ci_dev);
extern int aml_spi_mod_init(void);
extern void aml_spi_mod_exit(void);
#endif /* __AML_SPI_H_ */