1 // Copyright 2016 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #pragma once 6 7 #include <ddk/binding.h> 8 #include <ddk/device.h> 9 #include <zircon/types.h> 10 #include <zircon/listnode.h> 11 #include <stdint.h> 12 13 #define I2C_7BIT_ADDRESS 7 14 #define I2C_10BIT_ADDRESS 10 15 16 typedef struct i2c_slave_segment { 17 int type; 18 int len; 19 uint8_t* buf; 20 } i2c_slave_segment_t; 21 22 typedef struct intel_serialio_i2c_slave_device { 23 zx_device_t* zxdev; 24 struct intel_serialio_i2c_device* controller; 25 26 uint8_t chip_address_width; 27 uint16_t chip_address; 28 29 struct list_node slave_list_node; 30 } intel_serialio_i2c_slave_device_t; 31 32 // device protocol for a slave device 33 extern zx_protocol_device_t intel_serialio_i2c_slave_device_proto; 34 35 zx_status_t intel_serialio_i2c_slave_transfer( 36 intel_serialio_i2c_slave_device_t* slave, i2c_slave_segment_t *segments, int segment_count); 37 zx_status_t intel_serialio_i2c_slave_get_irq(intel_serialio_i2c_slave_device_t* slave, 38 zx_handle_t* out); 39