Home | History | Annotate | Download | only in wcd9xxx
      1 /* Copyright (c) 2012, The Linux Foundation. All rights reserved.
      2  *
      3  * This program is free software; you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License version 2 and
      5  * only version 2 as published by the Free Software Foundation.
      6  *
      7  * This program is distributed in the hope that it will be useful,
      8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     10  * GNU General Public License for more details.
     11  */
     12 
     13 #ifndef __WCD9310_SLIMSLAVE_H_
     14 #define __WCD9310_SLIMSLAVE_H_
     15 
     16 #include <linux/slimbus/slimbus.h>
     17 #include <linux/mfd/wcd9xxx/core.h>
     18 
     19 /* Channel numbers to be used for each port */
     20 enum {
     21 	SLIM_TX_1   = 128,
     22 	SLIM_TX_2   = 129,
     23 	SLIM_TX_3   = 130,
     24 	SLIM_TX_4   = 131,
     25 	SLIM_TX_5   = 132,
     26 	SLIM_TX_6   = 133,
     27 	SLIM_TX_7   = 134,
     28 	SLIM_TX_8   = 135,
     29 	SLIM_TX_9   = 136,
     30 	SLIM_TX_10  = 137,
     31 	SLIM_RX_1   = 138,
     32 	SLIM_RX_2   = 139,
     33 	SLIM_RX_3   = 140,
     34 	SLIM_RX_4   = 141,
     35 	SLIM_RX_5   = 142,
     36 	SLIM_RX_6   = 143,
     37 	SLIM_RX_7   = 144,
     38 	SLIM_MAX    = 145
     39 };
     40 
     41 /*
     42  *  client is expected to give port ids in the range of
     43  *  1-10 for pre Taiko Tx ports and 1-16 for Taiko
     44  *  1-7 for pre Taiko Rx ports and 1-16 for Tako,
     45  *  we need to add offset for getting the absolute slave
     46  *  port id before configuring the HW
     47  */
     48 #define TABLA_SB_PGD_MAX_NUMBER_OF_TX_SLAVE_DEV_PORTS 10
     49 #define TAIKO_SB_PGD_MAX_NUMBER_OF_TX_SLAVE_DEV_PORTS 16
     50 
     51 #define SLIM_MAX_TX_PORTS TAIKO_SB_PGD_MAX_NUMBER_OF_TX_SLAVE_DEV_PORTS
     52 
     53 #define TABLA_SB_PGD_OFFSET_OF_RX_SLAVE_DEV_PORTS \
     54 	TABLA_SB_PGD_MAX_NUMBER_OF_TX_SLAVE_DEV_PORTS
     55 #define TAIKO_SB_PGD_OFFSET_OF_RX_SLAVE_DEV_PORTS \
     56 	TAIKO_SB_PGD_MAX_NUMBER_OF_TX_SLAVE_DEV_PORTS
     57 
     58 #define TABLA_SB_PGD_MAX_NUMBER_OF_RX_SLAVE_DEV_PORTS 7
     59 #define TAIKO_SB_PGD_MAX_NUMBER_OF_RX_SLAVE_DEV_PORTS 13
     60 
     61 #define SLIM_MAX_RX_PORTS TAIKO_SB_PGD_MAX_NUMBER_OF_RX_SLAVE_DEV_PORTS
     62 
     63 #define TABLA_SB_PGD_RX_PORT_MULTI_CHANNEL_0_START_PORT_ID \
     64 	TABLA_SB_PGD_OFFSET_OF_RX_SLAVE_DEV_PORTS
     65 #define TAIKO_SB_PGD_RX_PORT_MULTI_CHANNEL_0_START_PORT_ID \
     66 	TAIKO_SB_PGD_OFFSET_OF_RX_SLAVE_DEV_PORTS
     67 
     68 #define TABLA_SB_PGD_RX_PORT_MULTI_CHANNEL_0_END_PORT_ID 16
     69 #define TAIKO_SB_PGD_RX_PORT_MULTI_CHANNEL_0_END_PORT_ID 31
     70 
     71 #define TABLA_SB_PGD_TX_PORT_MULTI_CHANNEL_1_END_PORT_ID 9
     72 #define TAIKO_SB_PGD_TX_PORT_MULTI_CHANNEL_1_END_PORT_ID 15
     73 
     74 /* below details are taken from SLIMBUS slave SWI */
     75 #define SB_PGD_PORT_BASE 0x000
     76 
     77 #define SB_PGD_PORT_CFG_BYTE_ADDR(offset, port_num) \
     78 		(SB_PGD_PORT_BASE + offset + (1 * port_num))
     79 
     80 #define SB_PGD_TX_PORT_MULTI_CHANNEL_0(port_num) \
     81 		(SB_PGD_PORT_BASE + 0x100 + 4*port_num)
     82 #define SB_PGD_TX_PORT_MULTI_CHANNEL_0_START_PORT_ID   0
     83 #define SB_PGD_TX_PORT_MULTI_CHANNEL_0_END_PORT_ID     7
     84 
     85 #define SB_PGD_TX_PORT_MULTI_CHANNEL_1(port_num) \
     86 		(SB_PGD_PORT_BASE + 0x101 + 4*port_num)
     87 #define SB_PGD_TX_PORT_MULTI_CHANNEL_1_START_PORT_ID   8
     88 
     89 #define SB_PGD_RX_PORT_MULTI_CHANNEL_0(offset, port_num) \
     90 		(SB_PGD_PORT_BASE + offset + (4 * port_num))
     91 
     92 /* slave port water mark level
     93  *   (0: 6bytes, 1: 9bytes, 2: 12 bytes, 3: 15 bytes)
     94  */
     95 #define SLAVE_PORT_WATER_MARK_VALUE 2
     96 #define SLAVE_PORT_WATER_MARK_SHIFT 1
     97 #define SLAVE_PORT_ENABLE           1
     98 #define SLAVE_PORT_DISABLE          0
     99 
    100 #define BASE_CH_NUM 128
    101 
    102 
    103 int wcd9xxx_init_slimslave(struct wcd9xxx *wcd9xxx, u8 wcd9xxx_pgd_la);
    104 
    105 int wcd9xxx_deinit_slimslave(struct wcd9xxx *wcd9xxx);
    106 
    107 int wcd9xxx_cfg_slim_sch_rx(struct wcd9xxx *wcd9xxx, unsigned int *ch_num,
    108 				unsigned int tot_ch, unsigned int rate);
    109 int wcd9xxx_cfg_slim_sch_tx(struct wcd9xxx *wcd9xxx, unsigned int *ch_num,
    110 				unsigned int tot_ch, unsigned int rate);
    111 int wcd9xxx_close_slim_sch_rx(struct wcd9xxx *wcd9xxx, unsigned int *ch_num,
    112 				unsigned int tot_ch);
    113 int wcd9xxx_close_slim_sch_tx(struct wcd9xxx *wcd9xxx, unsigned int *ch_num,
    114 				unsigned int tot_ch);
    115 int wcd9xxx_get_channel(struct wcd9xxx *wcd9xxx,
    116 			unsigned int *rx_ch,
    117 			unsigned int *tx_ch);
    118 int wcd9xxx_get_slave_port(unsigned int ch_num);
    119 int wcd9xxx_disconnect_port(struct wcd9xxx *wcd9xxx, unsigned int *ch_num,
    120 				unsigned int tot_ch, unsigned int rx_tx);
    121 #endif /* __WCD9310_SLIMSLAVE_H_ */
    122