|
@@ -173,9 +173,6 @@ static int xlr_i2c_tx(struct xlr_i2c_private *priv, u16 len,
|
|
|
u8 offset;
|
|
|
u32 xfer;
|
|
|
|
|
|
- if (!len)
|
|
|
- return -EOPNOTSUPP;
|
|
|
-
|
|
|
offset = buf[0];
|
|
|
xlr_i2c_wreg(priv->iobase, XLR_I2C_ADDR, offset);
|
|
|
xlr_i2c_wreg(priv->iobase, XLR_I2C_DEVADDR, addr);
|
|
@@ -241,9 +238,6 @@ static int xlr_i2c_rx(struct xlr_i2c_private *priv, u16 len, u8 *buf, u16 addr)
|
|
|
unsigned long timeout, stoptime, checktime;
|
|
|
int nbytes, timedout;
|
|
|
|
|
|
- if (!len)
|
|
|
- return -EOPNOTSUPP;
|
|
|
-
|
|
|
xlr_i2c_wreg(priv->iobase, XLR_I2C_CFG,
|
|
|
XLR_I2C_CFG_NOADDR | priv->cfg->cfg_extra);
|
|
|
xlr_i2c_wreg(priv->iobase, XLR_I2C_BYTECNT, len - 1);
|
|
@@ -340,6 +334,10 @@ static const struct i2c_algorithm xlr_i2c_algo = {
|
|
|
.functionality = xlr_func,
|
|
|
};
|
|
|
|
|
|
+static const struct i2c_adapter_quirks xlr_i2c_quirks = {
|
|
|
+ .flags = I2C_AQ_NO_ZERO_LEN,
|
|
|
+};
|
|
|
+
|
|
|
static const struct xlr_i2c_config xlr_i2c_config_default = {
|
|
|
.status_busy = XLR_I2C_BUS_BUSY,
|
|
|
.cfg_extra = 0,
|
|
@@ -427,6 +425,7 @@ static int xlr_i2c_probe(struct platform_device *pdev)
|
|
|
priv->adap.owner = THIS_MODULE;
|
|
|
priv->adap.algo_data = priv;
|
|
|
priv->adap.algo = &xlr_i2c_algo;
|
|
|
+ priv->adap.quirks = &xlr_i2c_quirks;
|
|
|
priv->adap.nr = pdev->id;
|
|
|
priv->adap.class = I2C_CLASS_HWMON;
|
|
|
snprintf(priv->adap.name, sizeof(priv->adap.name), "xlr-i2c");
|