Skip to content

Commit

Permalink
i2c: Add driver for ast2400 i2c master
Browse files Browse the repository at this point in the history
 - Rip out slave mode code
 - Use per-adapter device
 - Use separate controller & bus platform devices, use an irq controller
   for busses
 - Don't send stop when we're not done

Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Milton Miller <miltonm@us.ibm.com>
  • Loading branch information
shenki committed Mar 21, 2016
1 parent 44066f8 commit c2c9856
Show file tree
Hide file tree
Showing 5 changed files with 930 additions and 29 deletions.
63 changes: 34 additions & 29 deletions arch/arm/boot/dts/ast2400.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -92,160 +92,165 @@
i2c: i2c@1e78a040 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "aspeed,ast2400-i2c-common";
#interrupt-cells = <1>;

compatible = "aspeed,ast2400-i2c-controller";
reg = <0x1e78a000 0x40>;
ranges = <0 0x1e78a000 0x1000>;
interrupts = <12>;
clocks = <&clk_apb>;
clock-ranges;
interrupt-controller;

i2c0: i2c-bus@0x40 {
i2c0: i2c-bus@40 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x40 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <0>;
clock-frequency = <100000>;
status = "okay";
eeprom@50 {
compatible = "atmel,24c256";
reg = <0x50>;
pagesize = <64>;
};
rtc@68 {
compatible = "dallas,ds3231";
reg = <0x68>;
// interrupts = <GPIOF0>
};
interrupts = <0>;
interrupt-parent = <&i2c>;
};

i2c1: i2c-bus@0x80 {
i2c1: i2c-bus@80 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x80 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <1>;
clock-frequency = <100000>;
status = "okay";
interrupts = <1>;
};

i2c2: i2c-bus@0xC0 {
i2c2: i2c-bus@c0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0xC0 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <2>;
clock-frequency = <100000>;
status = "okay";
tmp423@4c {
compatible = "ti,tmp423";
reg = <0x4c>;
};
interrupts = <2>;
};

i2c3: i2c-bus@0x100 {
i2c3: i2c-bus@100 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x100 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <3>;
clock-frequency = <100000>;
status = "okay";
interrupts = <3>;
};

i2c4: i2c-bus@0x140 {
i2c4: i2c-bus@140 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x140 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <4>;
clock-frequency = <100000>;
status = "okay";
interrupts = <4>;
};

i2c5: i2c-bus@0x180 {
i2c5: i2c-bus@180 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x180 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <5>;
clock-frequency = <100000>;
status = "okay";
interrupts = <5>;
};

i2c6: i2c-bus@0x1C0 {
i2c6: i2c-bus@1c0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x1C0 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <6>;
clock-frequency = <100000>;
status = "okay";
interrupts = <6>;
};

i2c7: i2c-bus@0x300 {
i2c7: i2c-bus@300 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x300 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <7>;
clock-frequency = <100000>;
status = "okay";
interrupts = <7>;
};

i2c8: i2c-bus@0x340 {
i2c8: i2c-bus@340 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x340 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <8>;
clock-frequency = <100000>;
status = "okay";
interrupts = <8>;
};

i2c9: i2c-bus@0x380 {
i2c9: i2c-bus@380 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x380 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <9>;
clock-frequency = <100000>;
status = "disabled";
interrupts = <9>;
};

i2c10: i2c-bus@0x3C0 {
i2c10: i2c-bus@3c0 {
reg = <0x380 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <10>;
clock-frequency = <100000>;
status = "disabled";
interrupts = <10>;
};

i2c11: i2c-bus@0x400 {
i2c11: i2c-bus@400 {
reg = <0x400 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <11>;
clock-frequency = <100000>;
status = "disabled";
interrupts = <11>;
};

i2c12: i2c-bus@0x440 {
i2c12: i2c-bus@440 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x400 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <12>;
clock-frequency = <100000>;
status = "disabled";
interrupts = <12>;
};

i2c13: i2c-bus@0x480 {
i2c13: i2c-bus@480 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0x480 0x40>;
compatible = "aspeed,ast2400-i2c-bus";
bus = <13>;
clock-frequency = <100000>;
status = "disabled";
interrupts = <13>;
};

};
Expand Down
1 change: 1 addition & 0 deletions arch/arm/mach-aspeed/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ menuconfig ARCH_ASPEED
select CLKSRC_MMIO
select GENERIC_IRQ_CHIP
select ARCH_REQUIRE_GPIOLIB
select I2C_ASPEED
select PHYLIB if NETDEVICES
select MFD_SYSCON
select SRAM
Expand Down
11 changes: 11 additions & 0 deletions drivers/i2c/busses/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -993,6 +993,17 @@ config I2C_RCAR
This driver can also be built as a module. If so, the module
will be called i2c-rcar.

config I2C_ASPEED
tristate "Aspeed AST2xxx SoC I2C Controller"
depends on (ARCH_ASPEED || COMPILE_TEST) && OF
select I2C_SLAVE
help
If you say yes to this option, support will be included for the
Aspeed AST2xxx SoC I2C controller.

This driver can also be built as a module. If so, the module
will be called i2c-aspeed.

comment "External I2C/SMBus adapter drivers"

config I2C_DIOLAN_U2C
Expand Down
1 change: 1 addition & 0 deletions drivers/i2c/busses/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ obj-$(CONFIG_I2C_XILINX) += i2c-xiic.o
obj-$(CONFIG_I2C_XLR) += i2c-xlr.o
obj-$(CONFIG_I2C_XLP9XX) += i2c-xlp9xx.o
obj-$(CONFIG_I2C_RCAR) += i2c-rcar.o
obj-$(CONFIG_I2C_ASPEED) += i2c-aspeed.o

# External I2C/SMBus adapter drivers
obj-$(CONFIG_I2C_DIOLAN_U2C) += i2c-diolan-u2c.o
Expand Down
Loading

0 comments on commit c2c9856

Please sign in to comment.