blob: 5e51b5d26787a26b446cf0886b0366f6225f6d31 [file] [log] [blame]
Eric Biederman992cd002004-10-14 21:10:23 +00001#ifndef DEVICE_SMBUS_H
2#define DEVICE_SMBUS_H
3
4#include <stdint.h>
5#include <device/device.h>
Nico Huber632d6ab2017-08-02 16:57:17 +02006#include <device/i2c_bus.h>
Eric Biederman992cd002004-10-14 21:10:23 +00007#include <device/smbus_def.h>
8
Uwe Hermannd453dd02010-10-18 00:00:57 +00009/* Common SMBus bus operations */
Eric Biederman992cd002004-10-14 21:10:23 +000010struct smbus_bus_operations {
Lee Leahybab6bc42017-03-07 16:10:21 -080011 int (*recv_byte)(device_t dev);
12 int (*send_byte)(device_t dev, u8 value);
13 int (*read_byte)(device_t dev, u8 addr);
14 int (*write_byte)(device_t dev, u8 addr, u8 value);
Lee Leahybab6bc42017-03-07 16:10:21 -080015 int (*block_read)(device_t dev, u8 cmd, u8 bytes, u8 *buffer);
16 int (*block_write)(device_t dev, u8 cmd, u8 bytes, const u8 *buffer);
Eric Biederman992cd002004-10-14 21:10:23 +000017};
18
Yinghai Lu7213d0f2004-12-03 03:39:04 +000019static inline const struct smbus_bus_operations *ops_smbus_bus(struct bus *bus)
Eric Biederman992cd002004-10-14 21:10:23 +000020{
Uwe Hermannd453dd02010-10-18 00:00:57 +000021 const struct smbus_bus_operations *bops;
22
23 bops = 0;
24 if (bus && bus->dev && bus->dev->ops)
25 bops = bus->dev->ops->ops_smbus_bus;
26
27 return bops;
Eric Biederman992cd002004-10-14 21:10:23 +000028}
Uwe Hermannd453dd02010-10-18 00:00:57 +000029
Yinghai Lu7213d0f2004-12-03 03:39:04 +000030struct bus *get_pbus_smbus(device_t dev);
31int smbus_set_link(device_t dev);
32
Nico Huber632d6ab2017-08-02 16:57:17 +020033static inline int smbus_recv_byte(struct device *const dev)
34{
35 return i2c_readb(dev);
36}
37
38static inline int smbus_send_byte(struct device *const dev, u8 byte)
39{
40 return i2c_writeb(dev, byte);
41}
42
43static inline int smbus_read_byte(struct device *const dev, u8 addr)
44{
45 return i2c_readb_at(dev, addr);
46}
47
48static inline int smbus_write_byte(struct device *const dev, u8 addr, u8 val)
49{
50 return i2c_writeb_at(dev, addr, val);
51}
52
Uwe Hermannd453dd02010-10-18 00:00:57 +000053int smbus_block_read(device_t dev, u8 cmd, u8 bytes, u8 *buffer);
54int smbus_block_write(device_t dev, u8 cmd, u8 bytes, const u8 *buffer);
Eric Biederman992cd002004-10-14 21:10:23 +000055
Timothy Pearsonacbdade2015-10-17 04:36:47 -050056#if IS_ENABLED(CONFIG_SMBUS_HAS_AUX_CHANNELS)
57void smbus_switch_to_channel(uint8_t channel_number);
58uint8_t smbus_get_current_channel(void);
59#endif
60
Eric Biederman992cd002004-10-14 21:10:23 +000061#endif /* DEVICE_SMBUS_H */