coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
software_i2c.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/i2c_simple.h>
4 #include <gpio.h>
5 #include <soc/pinmux.h>
6 
7 #include "i2c.h"
8 
9 static struct {
13 } pins[] = {
14  [0]{.pinmux_func = PINMUX_GEN1_I2C_SCL_FUNC_I2C1,
15  .sda = GPIO(C5), .scl = GPIO(C4)},
16  [1]{.pinmux_func = PINMUX_GEN2_I2C_SCL_FUNC_I2C2,
17  .sda = GPIO(T6), .scl = GPIO(T5)},
18  [2]{.pinmux_func = PINMUX_CAM_I2C_SCL_FUNC_I2C3,
19  .sda = GPIO(BB2), .scl = GPIO(BB1)},
20  [3]{.pinmux_func = PINMUX_DDC_SCL_FUNC_I2C4,
21  .sda = GPIO(V5), .scl = GPIO(V4)},
22  [4]{.pinmux_func = PINMUX_PWR_I2C_SCL_FUNC_I2CPMU,
23  .sda = GPIO(Z7), .scl = GPIO(Z6)},
24 };
25 
26 static void tegra_set_sda(unsigned int bus, int high)
27 {
28  if (high)
30  else
31  gpio_output(pins[bus].sda, 0);
32 }
33 
34 static void tegra_set_scl(unsigned int bus, int high)
35 {
36  if (high)
38  else
39  gpio_output(pins[bus].scl, 0);
40 }
41 
42 static int tegra_get_sda(unsigned int bus)
43 {
44  return gpio_get(pins[bus].sda);
45 }
46 
47 static int tegra_get_scl(unsigned int bus)
48 {
49  return gpio_get(pins[bus].scl);
50 }
51 
52 static struct software_i2c_ops tegra_ops = {
54  .set_scl = tegra_set_scl,
55  .get_sda = tegra_get_sda,
56  .get_scl = tegra_get_scl,
57 };
58 
59 void tegra_software_i2c_init(unsigned int bus)
60 {
62 
63  /* Initialize bus to idle state. */
64  tegra_set_sda(bus, 1);
65  tegra_set_scl(bus, 1);
66 }
67 
68 void tegra_software_i2c_disable(unsigned int bus)
69 {
71 
72  /* Return pins to I2C controller. */
79 }
struct software_i2c_ops * software_i2c[SOFTWARE_I2C_MAX_BUS]
Definition: software_i2c.c:24
@ GPIO
Definition: chip.h:84
int gpio_get(gpio_t gpio)
Definition: gpio.c:166
void gpio_output(gpio_t gpio, int value)
Definition: gpio.c:194
void gpio_input_pullup(gpio_t gpio)
Definition: gpio.c:184
#define C4
Definition: jpeg.c:633
@ PINMUX_INPUT_ENABLE
Definition: pinmux.h:17
void pinmux_set_config(int pin_index, uint32_t config)
Definition: pinmux.c:10
void gpio_set_mode(gpio_t gpio, int mode)
Definition: gpio.c:45
#define GPIO_PINMUX_SHIFT
Definition: gpio.h:12
@ GPIO_MODE_SPIO
Definition: gpio.h:19
static struct @1213 pins[]
gpio_t sda
Definition: software_i2c.c:11
gpio_t scl
Definition: software_i2c.c:12
static struct software_i2c_ops tegra_ops
Definition: software_i2c.c:52
static void tegra_set_sda(unsigned int bus, int high)
Definition: software_i2c.c:26
void tegra_software_i2c_disable(unsigned int bus)
Definition: software_i2c.c:68
void tegra_software_i2c_init(unsigned int bus)
Definition: software_i2c.c:59
int pinmux_func
Definition: software_i2c.c:10
static int tegra_get_sda(unsigned int bus)
Definition: software_i2c.c:42
static int tegra_get_scl(unsigned int bus)
Definition: software_i2c.c:47
static void tegra_set_scl(unsigned int bus, int high)
Definition: software_i2c.c:34
#define NULL
Definition: stddef.h:19
Definition: device.h:76
void(* set_sda)(unsigned int bus, int high)
Definition: i2c_simple.h:16