blob: ecee071462bbbf6da853a73ee3fc7cadbb2669c5 [file] [log] [blame]
Angel Pons182dbde2020-04-02 23:49:05 +02001/* SPDX-License-Identifier: GPL-2.0-only */
zbao246e84b2012-07-13 18:47:03 +08002
Martin Rothf5726ea2013-01-18 12:55:40 -07003#ifndef HUDSON_SMBUS_H
4#define HUDSON_SMBUS_H
zbao246e84b2012-07-13 18:47:03 +08005
Paul Menzel883b03f2013-05-06 15:18:57 +02006#include <stdint.h>
zbao246e84b2012-07-13 18:47:03 +08007
Elyes HAOUAS0141f0d2020-10-01 10:22:34 +02008#define SMBHSTSTAT 0x0
9#define SMBSLVSTAT 0x1
10#define SMBHSTCTRL 0x2
11#define SMBHSTCMD 0x3
12#define SMBHSTADDR 0x4
13#define SMBHSTDAT0 0x5
14#define SMBHSTDAT1 0x6
15#define SMBHSTBLKDAT 0x7
zbao246e84b2012-07-13 18:47:03 +080016
Elyes HAOUAS0141f0d2020-10-01 10:22:34 +020017#define SMBSLVCTRL 0x8
18#define SMBSLVCMD_SHADOW 0x9
19#define SMBSLVEVT 0xa
20#define SMBSLVDAT 0xc
zbao246e84b2012-07-13 18:47:03 +080021
Elyes HAOUAS0141f0d2020-10-01 10:22:34 +020022#define AX_INDXC 0
23#define AX_INDXP 2
24#define AXCFG 4
25#define ABCFG 6
26#define RC_INDXC 1
27#define RC_INDXP 3
zbao246e84b2012-07-13 18:47:03 +080028
Elyes HAOUAS0141f0d2020-10-01 10:22:34 +020029#define AB_INDX 0xcd8
30#define AB_DATA (AB_INDX + 4)
zbao246e84b2012-07-13 18:47:03 +080031
32/* Between 1-10 seconds, We should never timeout normally
33 * Longer than this is just painful when a timeout condition occurs.
34 */
Elyes Haouas8833d652022-07-16 09:40:29 +020035#define SMBUS_TIMEOUT (100 * 1000 * 10)
zbao246e84b2012-07-13 18:47:03 +080036
37#define abcfg_reg(reg, mask, val) \
38 alink_ab_indx((ABCFG), (reg), (mask), (val))
39#define axcfg_reg(reg, mask, val) \
40 alink_ab_indx((AXCFG), (reg), (mask), (val))
41#define axindxc_reg(reg, mask, val) \
42 alink_ax_indx((AX_INDXC), (reg), (mask), (val))
43#define axindxp_reg(reg, mask, val) \
44 alink_ax_indx((AX_INDXP), (reg), (mask), (val))
45#define rcindxc_reg(reg, port, mask, val) \
46 alink_rc_indx((RC_INDXC), (reg), (port), (mask), (val))
47#define rcindxp_reg(reg, port, mask, val) \
48 alink_rc_indx((RC_INDXP), (reg), (port), (mask), (val))
49
50int do_smbus_read_byte(u32 smbus_io_base, u32 device, u32 address);
51int do_smbus_write_byte(u32 smbus_io_base, u32 device, u32 address, u8 val);
52int do_smbus_recv_byte(u32 smbus_io_base, u32 device);
53int do_smbus_send_byte(u32 smbus_io_base, u32 device, u8 val);
54void alink_rc_indx(u32 reg_space, u32 reg_addr, u32 port, u32 mask, u32 val);
55void alink_ab_indx(u32 reg_space, u32 reg_addr, u32 mask, u32 val);
Elyes Haouas8833d652022-07-16 09:40:29 +020056void alink_ax_indx(u32 space /*c or p? */, u32 axindc, u32 mask, u32 val);
zbao246e84b2012-07-13 18:47:03 +080057
zbao246e84b2012-07-13 18:47:03 +080058#endif