[go: nahoru, domu]

History log of /drivers/i2c/busses/i2c-designware-platdrv.c
Revision Date Author Comments
ca1f8da9ac5ce6e63d8f6933f83fabc1f3f961f4 04-Nov-2014 Wolfram Sang <wsa+renesas@sang-engineering.com> i2c: remove FSF address

We have a central copy of the GPL for that. Some addresses were already
outdated.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
a445900c906092f3b49ee40a7365d0d54acc568e 30-Sep-2014 Carl Peng <carlpeng008@gmail.com> i2c: designware: Add support for AMD I2C controller

Add support for AMD version of the DW I2C host controller. The device is
enumerated from ACPI namespace with ACPI ID AMD0010. Because the core
driver needs an input source clock, and this is not an Intel LPSS device
where clocks are provided through drivers/acpi/acpi_lpss.c, we register the
clock ourselves if the clock rate is given in ->driver_data

Signed-off-by: Carl Peng <carlpeng008@gmail.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
925ddb240d6c76e56dd3aa22493f5755c452ba61 30-Sep-2014 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: Rework probe() to get clock a bit later

In order to be able to create missing clock for AMD (and in future possibly
others) we move getting clock for the device a bit later. Also make ACPI/DT
configuration in the same place depending on from where the device was
enumerated from.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
0b26c845dfd554dd9030efbf0249d3830251e58b 30-Sep-2014 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: Default to fast mode in case of ACPI

There is no way in ACPI to tell in which speed the host controller is
supposed to run, so we default to fast mode (400KHz). Since this has been
the default all the time there should be no functional changes with this
change.

This is the first step required to refactor the driver probe so that we can
supply source clock from ACPI part of the driver to the core.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
4bcfda09936da647b0a3b49d5dcb3c6c6ebb0395 03-Sep-2014 Tan, Raymond <raymond.tan@intel.com> i2c: designware: add support of platform data to set I2C mode

Use the platform data to set the clk_freq when there is no DT configuration
available. The clk_freq in turn will determine the I2C speed mode.

In Quark, there is currently no other configuration mechanism other than
board files.

Signed-off-by: Raymond Tan <raymond.tan@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Hock Leong Kweh <hock.leong.kweh@intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
8e5f6b2a289c4374456fb785900b0b7445b719e6 20-Aug-2014 Romain Baeriswyl <Romain.Baeriswyl@abilis.com> i2c: designware: add support of I2C standard mode

Some legacy devices support ony I2C standard mode at 100kHz.
This patch allows to select the standard mode through the DTS
with the use of the existing clock-frequency parameter.

When clock-frequency parameter is not set, the fast mode is selected.
Only when the parameter is set at 100000, the standard mode is selected.

Signed-off-by: Romain Baeriswyl <romainba@abilis.com>
Reviewed-by: Christian Ruppert <christian.ruppert@abilis.com>
Acked-by: Alan Tull <atull@opensource.altera.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
0409516a2d29fcaca53ed4c90c22f11af9600199 23-Jul-2014 Alan Cox <alan@linux.intel.com> i2c: designware: add new bindings

This may appear as PCI or ACPI depending upon the firmware so we
have to list both. All share the same ACPI identifier but not
the same PCI identifier.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
70fba8302adecfa08a087c6f1dd39537a55f5bd3 10-Jul-2014 Wolfram Sang <wsa@the-dreams.de> i2c: i2c-designware-platdrv: Drop class based scanning to improve bootup time

This driver has been flagged to drop class based instantiation. The removal
improves boot-up time and is unneeded for embedded controllers. Users have been
warned to switch for some time now, so we can actually do the removal. Keep the
DEPRECATED flag, so the core can inform users that the behaviour finally
changed now. After another transition period, this flag can go, too.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
1fc2fe204cb9d8010e70716aa48b5c3db6379da3 15-May-2014 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: Add runtime PM hooks

It is possible that after entering runtime PM suspend the controller
context is lost due the fact that its power is removed. This happens for
example on Asus T100, an Intel Baytrail based tablet/laptop.

In order to get the controller back to functional state, we need to
implement runtime PM hooks which will re-initialize the hardware during
runtime PM resume. We can re-use the existing system suspend hooks as the
steps to resume/suspend the controller are the same.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
f537295a58ddc4460b9857c6e4a6959685447f3b 15-May-2014 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: Disable device on system suspend

Userspace can initiate system suspend on arbitrary times which means that
device drivers must make sure that their device gets quiesced before system
suspend is entered. Therefore disable the I2C host controller in the driver
system suspend hook.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
834f2d864a2d8513aac763a353c0ad7bde11af52 10-Feb-2014 Wolfram Sang <wsa@the-dreams.de> i2c: i2c-designware-platdrv: deprecate class based instantiation

Warn users that class based instantiation is going away soon in favour
of more robust probing and faster bootup times.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
6468276b22069d4442aafcd8c59e5d8ccae23f5f 20-Jan-2014 Romain Baeriswyl <Romain.Baeriswyl@abilis.com> i2c: designware: make SCL and SDA falling time configurable

This patch allows to set independantly SCL and SDA falling times.
The tLOW period is computed by taking into account the SCL falling time.
The tHIGH period is computed by taking into account the SDA falling time.

For instance in case the margin on tLOW is considered too small, it can
be increased by increasing the SCL falling time which is by default set
at 300ns.

The same applies for tHIGH period with the help of SDA falling time.

Signed-off-by: Romain Baeriswyl <romainba@abilis.com>
Reviewed-by: Christian Ruppert <christian.ruppert@abilis.com>
Acked-by: Shinya Kuribayashi <skuribay@pobox.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
25b3dfc87bff80317d67ddd2cd4cfb91e6fe7d79 12-Nov-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: add new ACPI IDs

Newer Intel PCHs with LPSS have the same Designware I2C controllers than
Haswell but the ACPI IDs differ. Add these IDs to the driver list.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
cccdcea14fc2de8707c52e537fa2b384ccfe7ec2 08-Oct-2013 Wolfram Sang <wsa@the-dreams.de> i2c: i2c-designware-platdrv: replace platform_driver_probe to support deferred probing

Subsystems like pinctrl and gpio rightfully make use of deferred probing at
core level. Now, deferred drivers won't be retried if they don't have a .probe
function specified in the driver struct. Fix this driver to have that, so the
devices it supports won't get lost in a deferred probe.

Reported-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
57cd1e3029e5fb4d238ad11fd0d7ad917179fdf2 19-Aug-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: get SDA hold time, HCNT and LCNT configuration from ACPI

Some Intel LPSS I2C devices make the SDA hold time and *CNT parameters
available via SSCN (standard mode) and FMCN (fast mode) ACPI methods.

Implement support for this so that we check whether an ACPI method exists
and if it does, fill in the SDA hold time and *CNT values to the device
private structure for core to use.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
55e71edb81b2b45273e7b284cce13ff24bde846f 21-Aug-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: move ACPI helpers into the core

This follows what has already been done for the DeviceTree helpers. Move
the ACPI helpers from drivers/acpi/acpi_i2c.c to the I2C core and update
documentation accordingly.

This also solves a problem reported by Jerry Snitselaar that we can't build
the ACPI I2C helpers as a module.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
687b81d083c082bc1e853032e3a2a54f8c251d27 11-Jul-2013 Wolfram Sang <wsa@the-dreams.de> i2c: move OF helpers into the core

I2C of helpers used to live in of_i2c.c but experience (from SPI) shows
that it is much cleaner to have this in the core. This also removes a
circular dependency between the helpers and the core, and so we can
finally register child nodes in the core instead of doing this manually
in each driver. So, fix the drivers and documentation, too.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
dfb03fb246dc893743a28d00966b1862ae836f2d 15-Jul-2013 Jingoo Han <jg1.han@samsung.com> i2c: designware: add CONFIG_PM_SLEEP to suspend/resume functions

Add CONFIG_PM_SLEEP to suspend/resume functions to fix the following
build warning when CONFIG_PM_SLEEP is not selected. This is because
sleep PM callbacks defined by SIMPLE_DEV_PM_OPS are only used when
the CONFIG_PM_SLEEP is enabled.

drivers/i2c/busses/i2c-designware-platdrv.c:211:12: warning: 'dw_i2c_suspend' defined but not used [-Wunused-function]
drivers/i2c/busses/i2c-designware-platdrv.c:221:12: warning: 'dw_i2c_resume' defined but not used [-Wunused-function]

Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
97191d734f6ac028e5e6dcd574378c1544a16c0b 02-Jul-2013 Vincent Stehlé <vincent.stehle@freescale.com> i2c-designware: use div_u64 to fix link

This fixes the following link error:

drivers/built-in.o: In function `dw_i2c_probe':
of_iommu.c:(.text+0x18c8f0): undefined reference to `__aeabi_uldivmod'
make: *** [vmlinux] Error 1

Signed-off-by: Vincent Stehlé <vincent.stehle@freescale.com>
Tested-by: Kevin Hilman <khilman@linaro.org>
Reviewed-by: Christian Ruppert <christian.ruppert@abilis.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
9803f868944e879c4623c0d910e81f1ae89ccfb4 26-Jun-2013 Christian Ruppert <christian.ruppert@abilis.com> i2c-designware: make SDA hold time configurable

This patch makes the SDA hold time configurable through device tree.

Signed-off-by: Christian Ruppert <christian.ruppert@abilis.com>
Signed-off-by: Pierrick Hascoet <pierrick.hascoet@abilis.com>
Acked-by: Vineet Gupta <vgupta@synopsys.com> for arch/arc bits
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
3cc2d009bc210516c61536273b304c4f6ccd797c 10-May-2013 Wolfram Sang <wsa@the-dreams.de> drivers/i2c/busses: don't check resource with devm_ioremap_resource

devm_ioremap_resource does sanity checks on the given resource. No need to
duplicate this in the driver.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
5a7e6bd809ca2f06bd669bd477ad3d6b48a3dd9f 13-May-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c: designware: add Intel BayTrail ACPI ID

This is the same controller as on Intel Lynxpoint but the ACPI ID is
different (8086F41). Add support for this.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
be7fbe6a8b4dd5b75db5a600bcd8de87f4761d85 18-Apr-2013 Wolfram Sang <wsa@the-dreams.de> i2c: designware-plat: drop superfluous {get|put}_device

Driver core already takes care of refcounting, no need to do this on
driver level again.

Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com>
43452335224bc0cbd605c6aee82b5c9c33e94cc6 10-Apr-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c-designware: switch to use runtime PM autosuspend

Using autosuspend helps to reduce the resume latency in situations where
another I2C message is going to be started soon. For example with HID over
I2C touch panels we get several messages in a short period of time while
the touch panel is in use.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
efe7d640ef486c4c0c305641dbcacc6918542b76 10-Apr-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c-designware: use dynamic adapter numbering on Lynxpoint

It is not good idea to mix static and dynamic I2C adapter numbering. In
this particular case on Lynxpoint we had graphics I2C adapter which took
the first numbers preventing the designware I2C driver from using the
adapter numbers it preferred.

Since Lynxpoint support was just introduced and there is no hardware available
outside Intel we can fix this by switching to use dynamic adapter numbering
instead of static.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
1cb715ca46946b1ad32735d11830a84a433f2b1b 10-Apr-2013 Andy Shevchenko <andriy.shevchenko@linux.intel.com> i2c-designware: move to managed functions (devm_*)

This makes the error handling much more simpler than open-coding everything
and in addition makes the probe function smaller and tidier.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
b34bb1ee71158d5b0f9028fb98afd026202bcfe9 01-Apr-2013 Rafael J. Wysocki <rafael.j.wysocki@intel.com> ACPI / I2C: Use parent's ACPI_HANDLE() in acpi_i2c_register_devices()

The ACPI handle of struct i2c_adapter's dev member should not be
set, because this causes that struct i2c_adapter to be associated
with the ACPI device node corresponding to its parent as the
second "physical_device", which is incorrect (this happens during
the registration of struct i2c_adapter). Consequently,
acpi_i2c_register_devices() should use the ACPI handle of the
parent of the struct i2c_adapter it is called for rather than the
struct i2c_adapter's ACPI handle (which should be NULL).

Make that happen and modify the i2c-designware-platdrv driver,
which currently is the only driver for ACPI-enumerated I2C
controller chips, not to set the ACPI handle for the
struct i2c_adapter it creates.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Aaron Lu <aaron.lu@intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Wolfram Sang <wsa@the-dreams.de>
55827f4aa6442ddd1d6a4e1e32f2f457eb113c22 15-Feb-2013 Doug Anderson <dianders@chromium.org> i2c: Remove unneeded xxx_set_drvdata(..., NULL) calls

There is simply no reason to be manually setting the private driver
data to NULL in the remove/fail to probe cases. This is just extra
cruft code that can be removed.

A few notes:
* Nothing relies on drvdata being set to NULL.
* The __device_release_driver() function eventually calls
dev_set_drvdata(dev, NULL) anyway, so there's no need to do it
twice.
* I verified that there were no cases where xxx_get_drvdata() was
being called in these drivers and checking for / relying on the NULL
return value.

This could be cleaned up kernel-wide but for now just take the baby
step and remove from the i2c subsystem.

Reported-by: Wolfram Sang <wsa@the-dreams.de>
Reported-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Doug Anderson <dianders@chromium.org>
Reviewed-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Peter Korsgaard <jacmet@sunsite.dk>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Marek Vasut <marex@denx.de>
Signed-off-by: Wolfram Sang <wolfram@the-dreams.de>
b61b14154b19e1ef1da9c1e283f0cf93470e0c70 16-Jan-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c-designware: add support for Intel Lynxpoint

Intel Lynxpoint has two I2C controllers. These controllers are enumerated
from ACPI namespace with IDs INT33C2 and INT33C3. Add support for these to
the I2C DesignWare platform driver.

This is based on the work of Dirk Brandewie.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
7272194ed391f9db8bb320c50d715e7e6bba8ff3 16-Jan-2013 Mika Westerberg <mika.westerberg@linux.intel.com> i2c-designware: add minimal support for runtime PM

In order to save power the device should be put to low power states
whenever it is not being used. We implement this by enabling minimal
runtime PM support.

There isn't much to do for the device itself as it is disabled once the
last transfer is completed but subsystem/domain runtime PM hooks can save
more power by power gating the device etc.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
0b255e927d47b550620dfd3475ee74b0f52e09c8 27-Nov-2012 Bill Pemberton <wfp5p@virginia.edu> i2c: remove __dev* attributes from subsystem

CONFIG_HOTPLUG is going away as an option. As result the __dev*
markings will be going away.

Remove use of __devinit, __devexit_p, __devinitdata, __devinitconst,
and __devexit.

Signed-off-by: Bill Pemberton <wfp5p@virginia.edu>
Acked-by: Peter Korsgaard <peter.korsgaard@barco.com> (for ocores and mux-gpio)
Acked-by: Havard Skinnemoen <hskinnemoen@gmail.com> (for i2c-gpio)
Acked-by: Guan Xuetao <gxt@mprc.pku.edu.cn> (for puf3)
Acked-by: Barry Song <baohua.song@csr.com> (for sirf)
Reviewed-by: Jean Delvare <khali@linux-fr.org>
[wsa: Fixed "foo* bar" flaws while we are here]
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
e1fac69f3b2c0430f56f47bf98eebac8b2da395c 17-Apr-2012 Viresh Kumar <viresh.kumar@st.com> i2c: designware: Add clk_{un}prepare() support

clk_{un}prepare is mandatory for platforms using common clock framework. Since
this driver is used by SPEAr platform, which supports common clock framework,
add clk_{un}prepare() support for designware i2c.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
3bf3b289c233c28aaef16546168a994070aa24a0 24-Feb-2012 Deepak Sikri <deepak.sikri@st.com> i2c: designware: add PM support

This patch adds in support for standby/S2R/hybernate for i2c-designware driver.

Signed-off-by: Deepak Sikri <deepak.sikri@st.com>
Signed-off-by: Rajeev Kumar <rajeev-dlh.kumar@st.com>
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
104522806a7d9d47c34f425dee2bcd7f1ee5613e 28-Feb-2012 Pratyush Anand <pratyush.anand@st.com> i2c: designware: dw_i2c_init_driver as subsys initcall

There are few drivers which are available on i2c bus but have been initialized
with subsys_initcall. Also as I2C is a bus driver, it should be available as
early as possible.

Signed-off-by: Pratyush Anand <pratyush.anand@st.com>
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>

[wsa: Slightly updated the commit message]

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
af71100c7acf3ccaf95044cd5e9e866178e5f8a1 08-Nov-2011 Rob Herring <rob.herring@calxeda.com> i2c-designware: add OF binding support

Add of_match_table and DT style i2c registration to designware i2c
driver.

Refactored for pci/plat split by Dirk Brandewie.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
f3fa9f3da5621154323775ff0efdba99dcebcee4 06-Oct-2011 Dirk Brandewie <dirk.brandewie@gmail.com> i2c-designware: Push all register reads/writes into the core code.

Move all register manipulation code into the core, also move register
offset definitions to i2c-designware-core.c since the bus specific
portions of the driver no longer need/use them.

Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
e18563fc560aba0d95a5a73145812a081fb38fac 06-Oct-2011 Dirk Brandewie <dirk.brandewie@gmail.com> i2c-designware: move controller config to bus specific portion of driver

With multiple I2C adapters possible in the system each running at
(possibly) different speeds we need to move the controller
configuration bit field to the adapter.

Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
2fa8326b4b1e5fdc889b57b03b1313f3229cb438 06-Oct-2011 Dirk Brandewie <dirk.brandewie@gmail.com> i2c-designware: move i2c functionality bit field to be adapter specific

The functionality of the adapter depends on the configuration of the
IP block at silicon compile time and is adapter specific.

Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
1d31b58f648c4f754b23fed4d57acc941080e5ee 06-Oct-2011 Dirk Brandewie <dirk.brandewie@gmail.com> i2c-designware: Move retriveving the clock speed out of core code.

The clock frequecy supplied to the IP core is specific to a single
instance of the driver. This patch makes it possible to have multiple
Designware I2C cores in the system possibly running at different core
frequencies.

Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
2373f6b9744d5373b886f3ce1a985193cca0a356 29-Oct-2011 Dirk Brandewie <dirk.brandewie@gmail.com> i2c-designware: split of i2c-designware.c into core and bus specific parts

This patch splits i2c-designware.c into three pieces:
i2c-designware-core.c, contains the code that interacts directly
with the core.

i2c-designware-platdrv.c, contains the code specific to the
platform driver using the core.

i2c-designware-core.h contains the definitions and declareations
shared by i2c-designware-core.c and i2c-designware-platdrv.c.

This patch is the first in a set to allow multiple instances of the
designware I2C core in the system.

Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>