您的位置:首页 > 其它

i2c buss(i2c-core.c)

2015-12-31 15:53 411 查看
I2C Bus(i2c-core.c)

 i2c_device_probe(struct device *dev)i2c_device_remove(struct device *dev)i2c_device_shutdown(struct device *dev) static const struct dev_pm_ops i2c_device_pm_ops = {

        .suspend = i2c_device_pm_suspend,

        .resume = i2c_device_pm_resume,

        .freeze = i2c_device_pm_freeze,

        .thaw = i2c_device_pm_thaw,

        .poweroff = i2c_device_pm_poweroff,

        .restore = i2c_device_pm_restore,

        SET_RUNTIME_PM_OPS(

                pm_generic_runtime_suspend,

                pm_generic_runtime_resume,

                NULL

        )

};

 struct bus_type i2c_bus_type = {

        .name           = "i2c",

        .match          = i2c_device_match,

        .probe          = i2c_device_probe,

        .remove         = i2c_device_remove,

        .shutdown       = i2c_device_shutdown,

        .pm             = &i2c_device_pm_ops,

};

 i2c_check_addr_validity(unsigned short addr)i2c_check_addr_busy(struct i2c_adapter *adapter, int addr) i2c_lock_adapter(struct i2c_adapter *adapter)i2c_trylock_adapter(struct i2c_adapter *adapter)i2c_unlock_adapter(struct i2c_adapter *adapter) i2c_dev_set_name(struct
i2c_adapter *adap,struct i2c_client *client) i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info): instantiate an i2c device i2c_sysfs_delete_device and i2c_sysfs_new_device: there are "new_device" and "delete_device" node that we can
use to create one new i2c_client or delete it.for example:echo "i2c_example 34" > new_devicethere will be "0-0022/" directory be createdecho "34" > delete_devicethe "0-0022/" directory will be removed of_i2c_register_devices(struct i2c_adapter *adap) of_find_i2c_device_by_node(struct
device_node *node)of_find_i2c_adapter_by_node(struct device_node *node) i2c_register_adapter(struct i2c_adapter *adap) i2c_add_adapter(struct i2c_adapter *adapter):declare i2c adapter, use dynamic bus number i2c_add_numbered_adapter(struct i2c_adapter *adap):declare
i2c adapter, use static bus number i2c_del_adapter(struct i2c_adapter *adap): unregister I2C adapter i2c_register_driver(struct module *owner, struct i2c_driver *driver): register one i2c_driver i2c_del_driver(struct i2c_driver *driver): unregister I2C driver.

i2c_use_client(struct i2c_client *client): increments the reference count of the i2c client structure

i2c_release_client(struct i2c_client *client):release a use of the i2c client structure

struct i2c_cmd_arg {

        unsigned        cmd;

        void            *arg;

};

i2c_cmd:

i2c_clients_command: send command to adapter's every client and do the responding i2c_driver's command interface.

i2c_init: register bus: i2c_bus_type

i2c_exit: unregister bus: i2c_bus_type

the functional interface to the i2c busses.

__i2c_transfer:unlocked flavor of i2c_transfer

i2c_transfer(struct i2c_adapter *adap, struct i2c_mst *msgs, int num):execute a single or combined I2C message

i2c_master_send(const struct i2c_client *client, char *buf, int count):issue a single I2C message in master transmit mode

i2c_master_recv(const struct i2c_client *client, char *buf, int count): issue a single I2C message in master receive mode, specially there is a flag I2C_M_RD.

i2c_adapter_id: return adapter's nr.

i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver):

i2c_check_addr_busy(struct i2c_adapter *adapter, int addr): check if the addr have already been assigned to one client of adapter's client list.

i2c_check_addr_validity: as 0x0~0x7 and 0x78~0x7f is revered, so addr must not in those range.

i2c_new_probed_device(struct i2c_adapter *adap, struct i2c_board_info *info, unsigned short const *addr_list, int (*probe)(struct i2c_adapter *, unsigned short addr)): try select a valid addr from address list to add a new i2c_client.

i2c_get_adapter: give adapter's number to get the adapter and do moudle_get to increase its reference

i2c_put_adapter: decrease its reference

For new i2c driver added:

use platform bus to register the device and match the driver's probe.

in the probe:

i2c_add_numbered_adapter(adap); // but assign new i2c_algorithm with .master_xfer and .functionality be assigned

the i2c driver mainly implement the master_xfer and supply some PM functions
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: