Lines Matching +full:i2c +full:- +full:scl +full:- +full:hz
1 // SPDX-License-Identifier: GPL-2.0-only
3 * i2c-versatile.c
10 #include <linux/i2c.h>
11 #include <linux/i2c-algo-bit.h>
20 #define SCL (1 << 0) macro
31 struct i2c_versatile *i2c = data; in i2c_versatile_setsda() local
33 writel(SDA, i2c->base + (state ? I2C_CONTROLS : I2C_CONTROLC)); in i2c_versatile_setsda()
38 struct i2c_versatile *i2c = data; in i2c_versatile_setscl() local
40 writel(SCL, i2c->base + (state ? I2C_CONTROLS : I2C_CONTROLC)); in i2c_versatile_setscl()
45 struct i2c_versatile *i2c = data; in i2c_versatile_getsda() local
46 return !!(readl(i2c->base + I2C_CONTROL) & SDA); in i2c_versatile_getsda()
51 struct i2c_versatile *i2c = data; in i2c_versatile_getscl() local
52 return !!(readl(i2c->base + I2C_CONTROL) & SCL); in i2c_versatile_getscl()
61 .timeout = HZ,
66 struct i2c_versatile *i2c; in i2c_versatile_probe() local
69 i2c = devm_kzalloc(&dev->dev, sizeof(struct i2c_versatile), GFP_KERNEL); in i2c_versatile_probe()
70 if (!i2c) in i2c_versatile_probe()
71 return -ENOMEM; in i2c_versatile_probe()
73 i2c->base = devm_platform_get_and_ioremap_resource(dev, 0, NULL); in i2c_versatile_probe()
74 if (IS_ERR(i2c->base)) in i2c_versatile_probe()
75 return PTR_ERR(i2c->base); in i2c_versatile_probe()
77 writel(SCL | SDA, i2c->base + I2C_CONTROLS); in i2c_versatile_probe()
79 i2c->adap.owner = THIS_MODULE; in i2c_versatile_probe()
80 strscpy(i2c->adap.name, "Versatile I2C adapter", sizeof(i2c->adap.name)); in i2c_versatile_probe()
81 i2c->adap.algo_data = &i2c->algo; in i2c_versatile_probe()
82 i2c->adap.dev.parent = &dev->dev; in i2c_versatile_probe()
83 i2c->adap.dev.of_node = dev->dev.of_node; in i2c_versatile_probe()
84 i2c->algo = i2c_versatile_algo; in i2c_versatile_probe()
85 i2c->algo.data = i2c; in i2c_versatile_probe()
87 i2c->adap.nr = dev->id; in i2c_versatile_probe()
88 ret = i2c_bit_add_numbered_bus(&i2c->adap); in i2c_versatile_probe()
92 platform_set_drvdata(dev, i2c); in i2c_versatile_probe()
99 struct i2c_versatile *i2c = platform_get_drvdata(dev); in i2c_versatile_remove() local
101 i2c_del_adapter(&i2c->adap); in i2c_versatile_remove()
105 { .compatible = "arm,versatile-i2c", },
114 .name = "versatile-i2c",
132 MODULE_DESCRIPTION("ARM Versatile I2C bus driver");
134 MODULE_ALIAS("platform:versatile-i2c");