Commit e46dccff authored by Andres Salomon's avatar Andres Salomon Committed by Samuel Ortiz

mfd: mfd_cell is now implicitly available to timberdale drivers

The cell's platform_data is now accessed with a helper function;
change clients to use that, and remove the now-unused data_size.

Note that the mfd's platform_data is marked __devinitdata.  This
is still correct in all cases except for the timbgpio driver, whose
remove hook has been changed to no longer reference the pdata.
Signed-off-by: default avatarAndres Salomon <dilinger@queued.net>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 07ae2a08
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/timb_dma.h> #include <linux/timb_dma.h>
...@@ -684,7 +685,7 @@ static irqreturn_t td_irq(int irq, void *devid) ...@@ -684,7 +685,7 @@ static irqreturn_t td_irq(int irq, void *devid)
static int __devinit td_probe(struct platform_device *pdev) static int __devinit td_probe(struct platform_device *pdev)
{ {
struct timb_dma_platform_data *pdata = pdev->dev.platform_data; struct timb_dma_platform_data *pdata = mfd_get_data(pdev);
struct timb_dma *td; struct timb_dma *td;
struct resource *iomem; struct resource *iomem;
int irq; int irq;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/timb_gpio.h> #include <linux/timb_gpio.h>
...@@ -228,7 +229,7 @@ static int __devinit timbgpio_probe(struct platform_device *pdev) ...@@ -228,7 +229,7 @@ static int __devinit timbgpio_probe(struct platform_device *pdev)
struct gpio_chip *gc; struct gpio_chip *gc;
struct timbgpio *tgpio; struct timbgpio *tgpio;
struct resource *iomem; struct resource *iomem;
struct timbgpio_platform_data *pdata = pdev->dev.platform_data; struct timbgpio_platform_data *pdata = mfd_get_data(pdev);
int irq = platform_get_irq(pdev, 0); int irq = platform_get_irq(pdev, 0);
if (!pdata || pdata->nr_pins > 32) { if (!pdata || pdata->nr_pins > 32) {
...@@ -319,14 +320,13 @@ static int __devinit timbgpio_probe(struct platform_device *pdev) ...@@ -319,14 +320,13 @@ static int __devinit timbgpio_probe(struct platform_device *pdev)
static int __devexit timbgpio_remove(struct platform_device *pdev) static int __devexit timbgpio_remove(struct platform_device *pdev)
{ {
int err; int err;
struct timbgpio_platform_data *pdata = pdev->dev.platform_data;
struct timbgpio *tgpio = platform_get_drvdata(pdev); struct timbgpio *tgpio = platform_get_drvdata(pdev);
struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0); struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
int irq = platform_get_irq(pdev, 0); int irq = platform_get_irq(pdev, 0);
if (irq >= 0 && tgpio->irq_base > 0) { if (irq >= 0 && tgpio->irq_base > 0) {
int i; int i;
for (i = 0; i < pdata->nr_pins; i++) { for (i = 0; i < tgpio->gpio.ngpio; i++) {
set_irq_chip(tgpio->irq_base + i, NULL); set_irq_chip(tgpio->irq_base + i, NULL);
set_irq_chip_data(tgpio->irq_base + i, NULL); set_irq_chip_data(tgpio->irq_base + i, NULL);
} }
......
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/wait.h> #include <linux/wait.h>
...@@ -305,7 +306,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev) ...@@ -305,7 +306,7 @@ static int __devinit ocores_i2c_probe(struct platform_device *pdev)
return -EIO; return -EIO;
} }
pdata = pdev->dev.platform_data; pdata = mfd_get_data(pdev);
if (pdata) { if (pdata) {
i2c->regstep = pdata->regstep; i2c->regstep = pdata->regstep;
i2c->clock_khz = pdata->clock_khz; i2c->clock_khz = pdata->clock_khz;
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/wait.h> #include <linux/wait.h>
...@@ -704,7 +705,7 @@ static int __devinit xiic_i2c_probe(struct platform_device *pdev) ...@@ -704,7 +705,7 @@ static int __devinit xiic_i2c_probe(struct platform_device *pdev)
if (irq < 0) if (irq < 0)
goto resource_missing; goto resource_missing;
pdata = (struct xiic_i2c_platform_data *) pdev->dev.platform_data; pdata = mfd_get_data(pdev);
if (!pdata) if (!pdata)
return -EINVAL; return -EINVAL;
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <media/v4l2-ioctl.h> #include <media/v4l2-ioctl.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/i2c.h> #include <linux/i2c.h>
...@@ -148,7 +149,7 @@ static const struct v4l2_file_operations timbradio_fops = { ...@@ -148,7 +149,7 @@ static const struct v4l2_file_operations timbradio_fops = {
static int __devinit timbradio_probe(struct platform_device *pdev) static int __devinit timbradio_probe(struct platform_device *pdev)
{ {
struct timb_radio_platform_data *pdata = pdev->dev.platform_data; struct timb_radio_platform_data *pdata = mfd_get_data(pdev);
struct timbradio *tr; struct timbradio *tr;
int err; int err;
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/dmaengine.h> #include <linux/dmaengine.h>
#include <linux/mfd/core.h>
#include <linux/scatterlist.h> #include <linux/scatterlist.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/list.h> #include <linux/list.h>
...@@ -790,7 +791,7 @@ static int __devinit timblogiw_probe(struct platform_device *pdev) ...@@ -790,7 +791,7 @@ static int __devinit timblogiw_probe(struct platform_device *pdev)
{ {
int err; int err;
struct timblogiw *lw = NULL; struct timblogiw *lw = NULL;
struct timb_video_platform_data *pdata = pdev->dev.platform_data; struct timb_video_platform_data *pdata = mfd_get_data(pdev);
if (!pdata) { if (!pdata) {
dev_err(&pdev->dev, "No platform data\n"); dev_err(&pdev->dev, "No platform data\n");
......
...@@ -385,7 +385,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg0[] = { ...@@ -385,7 +385,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg0[] = {
.num_resources = ARRAY_SIZE(timberdale_dma_resources), .num_resources = ARRAY_SIZE(timberdale_dma_resources),
.resources = timberdale_dma_resources, .resources = timberdale_dma_resources,
.platform_data = &timb_dma_platform_data, .platform_data = &timb_dma_platform_data,
.data_size = sizeof(timb_dma_platform_data),
}, },
{ {
.name = "timb-uart", .name = "timb-uart",
...@@ -397,42 +396,36 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg0[] = { ...@@ -397,42 +396,36 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg0[] = {
.num_resources = ARRAY_SIZE(timberdale_xiic_resources), .num_resources = ARRAY_SIZE(timberdale_xiic_resources),
.resources = timberdale_xiic_resources, .resources = timberdale_xiic_resources,
.platform_data = &timberdale_xiic_platform_data, .platform_data = &timberdale_xiic_platform_data,
.data_size = sizeof(timberdale_xiic_platform_data),
}, },
{ {
.name = "timb-gpio", .name = "timb-gpio",
.num_resources = ARRAY_SIZE(timberdale_gpio_resources), .num_resources = ARRAY_SIZE(timberdale_gpio_resources),
.resources = timberdale_gpio_resources, .resources = timberdale_gpio_resources,
.platform_data = &timberdale_gpio_platform_data, .platform_data = &timberdale_gpio_platform_data,
.data_size = sizeof(timberdale_gpio_platform_data),
}, },
{ {
.name = "timb-video", .name = "timb-video",
.num_resources = ARRAY_SIZE(timberdale_video_resources), .num_resources = ARRAY_SIZE(timberdale_video_resources),
.resources = timberdale_video_resources, .resources = timberdale_video_resources,
.platform_data = &timberdale_video_platform_data, .platform_data = &timberdale_video_platform_data,
.data_size = sizeof(timberdale_video_platform_data),
}, },
{ {
.name = "timb-radio", .name = "timb-radio",
.num_resources = ARRAY_SIZE(timberdale_radio_resources), .num_resources = ARRAY_SIZE(timberdale_radio_resources),
.resources = timberdale_radio_resources, .resources = timberdale_radio_resources,
.platform_data = &timberdale_radio_platform_data, .platform_data = &timberdale_radio_platform_data,
.data_size = sizeof(timberdale_radio_platform_data),
}, },
{ {
.name = "xilinx_spi", .name = "xilinx_spi",
.num_resources = ARRAY_SIZE(timberdale_spi_resources), .num_resources = ARRAY_SIZE(timberdale_spi_resources),
.resources = timberdale_spi_resources, .resources = timberdale_spi_resources,
.platform_data = &timberdale_xspi_platform_data, .platform_data = &timberdale_xspi_platform_data,
.data_size = sizeof(timberdale_xspi_platform_data),
}, },
{ {
.name = "ks8842", .name = "ks8842",
.num_resources = ARRAY_SIZE(timberdale_eth_resources), .num_resources = ARRAY_SIZE(timberdale_eth_resources),
.resources = timberdale_eth_resources, .resources = timberdale_eth_resources,
.platform_data = &timberdale_ks8842_platform_data, .platform_data = &timberdale_ks8842_platform_data,
.data_size = sizeof(timberdale_ks8842_platform_data)
}, },
}; };
...@@ -442,7 +435,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg1[] = { ...@@ -442,7 +435,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg1[] = {
.num_resources = ARRAY_SIZE(timberdale_dma_resources), .num_resources = ARRAY_SIZE(timberdale_dma_resources),
.resources = timberdale_dma_resources, .resources = timberdale_dma_resources,
.platform_data = &timb_dma_platform_data, .platform_data = &timb_dma_platform_data,
.data_size = sizeof(timb_dma_platform_data),
}, },
{ {
.name = "timb-uart", .name = "timb-uart",
...@@ -459,14 +451,12 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg1[] = { ...@@ -459,14 +451,12 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg1[] = {
.num_resources = ARRAY_SIZE(timberdale_xiic_resources), .num_resources = ARRAY_SIZE(timberdale_xiic_resources),
.resources = timberdale_xiic_resources, .resources = timberdale_xiic_resources,
.platform_data = &timberdale_xiic_platform_data, .platform_data = &timberdale_xiic_platform_data,
.data_size = sizeof(timberdale_xiic_platform_data),
}, },
{ {
.name = "timb-gpio", .name = "timb-gpio",
.num_resources = ARRAY_SIZE(timberdale_gpio_resources), .num_resources = ARRAY_SIZE(timberdale_gpio_resources),
.resources = timberdale_gpio_resources, .resources = timberdale_gpio_resources,
.platform_data = &timberdale_gpio_platform_data, .platform_data = &timberdale_gpio_platform_data,
.data_size = sizeof(timberdale_gpio_platform_data),
}, },
{ {
.name = "timb-mlogicore", .name = "timb-mlogicore",
...@@ -478,28 +468,24 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg1[] = { ...@@ -478,28 +468,24 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg1[] = {
.num_resources = ARRAY_SIZE(timberdale_video_resources), .num_resources = ARRAY_SIZE(timberdale_video_resources),
.resources = timberdale_video_resources, .resources = timberdale_video_resources,
.platform_data = &timberdale_video_platform_data, .platform_data = &timberdale_video_platform_data,
.data_size = sizeof(timberdale_video_platform_data),
}, },
{ {
.name = "timb-radio", .name = "timb-radio",
.num_resources = ARRAY_SIZE(timberdale_radio_resources), .num_resources = ARRAY_SIZE(timberdale_radio_resources),
.resources = timberdale_radio_resources, .resources = timberdale_radio_resources,
.platform_data = &timberdale_radio_platform_data, .platform_data = &timberdale_radio_platform_data,
.data_size = sizeof(timberdale_radio_platform_data),
}, },
{ {
.name = "xilinx_spi", .name = "xilinx_spi",
.num_resources = ARRAY_SIZE(timberdale_spi_resources), .num_resources = ARRAY_SIZE(timberdale_spi_resources),
.resources = timberdale_spi_resources, .resources = timberdale_spi_resources,
.platform_data = &timberdale_xspi_platform_data, .platform_data = &timberdale_xspi_platform_data,
.data_size = sizeof(timberdale_xspi_platform_data),
}, },
{ {
.name = "ks8842", .name = "ks8842",
.num_resources = ARRAY_SIZE(timberdale_eth_resources), .num_resources = ARRAY_SIZE(timberdale_eth_resources),
.resources = timberdale_eth_resources, .resources = timberdale_eth_resources,
.platform_data = &timberdale_ks8842_platform_data, .platform_data = &timberdale_ks8842_platform_data,
.data_size = sizeof(timberdale_ks8842_platform_data)
}, },
}; };
...@@ -509,7 +495,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg2[] = { ...@@ -509,7 +495,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg2[] = {
.num_resources = ARRAY_SIZE(timberdale_dma_resources), .num_resources = ARRAY_SIZE(timberdale_dma_resources),
.resources = timberdale_dma_resources, .resources = timberdale_dma_resources,
.platform_data = &timb_dma_platform_data, .platform_data = &timb_dma_platform_data,
.data_size = sizeof(timb_dma_platform_data),
}, },
{ {
.name = "timb-uart", .name = "timb-uart",
...@@ -521,35 +506,30 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg2[] = { ...@@ -521,35 +506,30 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg2[] = {
.num_resources = ARRAY_SIZE(timberdale_xiic_resources), .num_resources = ARRAY_SIZE(timberdale_xiic_resources),
.resources = timberdale_xiic_resources, .resources = timberdale_xiic_resources,
.platform_data = &timberdale_xiic_platform_data, .platform_data = &timberdale_xiic_platform_data,
.data_size = sizeof(timberdale_xiic_platform_data),
}, },
{ {
.name = "timb-gpio", .name = "timb-gpio",
.num_resources = ARRAY_SIZE(timberdale_gpio_resources), .num_resources = ARRAY_SIZE(timberdale_gpio_resources),
.resources = timberdale_gpio_resources, .resources = timberdale_gpio_resources,
.platform_data = &timberdale_gpio_platform_data, .platform_data = &timberdale_gpio_platform_data,
.data_size = sizeof(timberdale_gpio_platform_data),
}, },
{ {
.name = "timb-video", .name = "timb-video",
.num_resources = ARRAY_SIZE(timberdale_video_resources), .num_resources = ARRAY_SIZE(timberdale_video_resources),
.resources = timberdale_video_resources, .resources = timberdale_video_resources,
.platform_data = &timberdale_video_platform_data, .platform_data = &timberdale_video_platform_data,
.data_size = sizeof(timberdale_video_platform_data),
}, },
{ {
.name = "timb-radio", .name = "timb-radio",
.num_resources = ARRAY_SIZE(timberdale_radio_resources), .num_resources = ARRAY_SIZE(timberdale_radio_resources),
.resources = timberdale_radio_resources, .resources = timberdale_radio_resources,
.platform_data = &timberdale_radio_platform_data, .platform_data = &timberdale_radio_platform_data,
.data_size = sizeof(timberdale_radio_platform_data),
}, },
{ {
.name = "xilinx_spi", .name = "xilinx_spi",
.num_resources = ARRAY_SIZE(timberdale_spi_resources), .num_resources = ARRAY_SIZE(timberdale_spi_resources),
.resources = timberdale_spi_resources, .resources = timberdale_spi_resources,
.platform_data = &timberdale_xspi_platform_data, .platform_data = &timberdale_xspi_platform_data,
.data_size = sizeof(timberdale_xspi_platform_data),
}, },
}; };
...@@ -559,7 +539,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg3[] = { ...@@ -559,7 +539,6 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg3[] = {
.num_resources = ARRAY_SIZE(timberdale_dma_resources), .num_resources = ARRAY_SIZE(timberdale_dma_resources),
.resources = timberdale_dma_resources, .resources = timberdale_dma_resources,
.platform_data = &timb_dma_platform_data, .platform_data = &timb_dma_platform_data,
.data_size = sizeof(timb_dma_platform_data),
}, },
{ {
.name = "timb-uart", .name = "timb-uart",
...@@ -571,42 +550,36 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg3[] = { ...@@ -571,42 +550,36 @@ static __devinitdata struct mfd_cell timberdale_cells_bar0_cfg3[] = {
.num_resources = ARRAY_SIZE(timberdale_ocores_resources), .num_resources = ARRAY_SIZE(timberdale_ocores_resources),
.resources = timberdale_ocores_resources, .resources = timberdale_ocores_resources,
.platform_data = &timberdale_ocores_platform_data, .platform_data = &timberdale_ocores_platform_data,
.data_size = sizeof(timberdale_ocores_platform_data),
}, },
{ {
.name = "timb-gpio", .name = "timb-gpio",
.num_resources = ARRAY_SIZE(timberdale_gpio_resources), .num_resources = ARRAY_SIZE(timberdale_gpio_resources),
.resources = timberdale_gpio_resources, .resources = timberdale_gpio_resources,
.platform_data = &timberdale_gpio_platform_data, .platform_data = &timberdale_gpio_platform_data,
.data_size = sizeof(timberdale_gpio_platform_data),
}, },
{ {
.name = "timb-video", .name = "timb-video",
.num_resources = ARRAY_SIZE(timberdale_video_resources), .num_resources = ARRAY_SIZE(timberdale_video_resources),
.resources = timberdale_video_resources, .resources = timberdale_video_resources,
.platform_data = &timberdale_video_platform_data, .platform_data = &timberdale_video_platform_data,
.data_size = sizeof(timberdale_video_platform_data),
}, },
{ {
.name = "timb-radio", .name = "timb-radio",
.num_resources = ARRAY_SIZE(timberdale_radio_resources), .num_resources = ARRAY_SIZE(timberdale_radio_resources),
.resources = timberdale_radio_resources, .resources = timberdale_radio_resources,
.platform_data = &timberdale_radio_platform_data, .platform_data = &timberdale_radio_platform_data,
.data_size = sizeof(timberdale_radio_platform_data),
}, },
{ {
.name = "xilinx_spi", .name = "xilinx_spi",
.num_resources = ARRAY_SIZE(timberdale_spi_resources), .num_resources = ARRAY_SIZE(timberdale_spi_resources),
.resources = timberdale_spi_resources, .resources = timberdale_spi_resources,
.platform_data = &timberdale_xspi_platform_data, .platform_data = &timberdale_xspi_platform_data,
.data_size = sizeof(timberdale_xspi_platform_data),
}, },
{ {
.name = "ks8842", .name = "ks8842",
.num_resources = ARRAY_SIZE(timberdale_eth_resources), .num_resources = ARRAY_SIZE(timberdale_eth_resources),
.resources = timberdale_eth_resources, .resources = timberdale_eth_resources,
.platform_data = &timberdale_ks8842_platform_data, .platform_data = &timberdale_ks8842_platform_data,
.data_size = sizeof(timberdale_ks8842_platform_data)
}, },
}; };
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/netdevice.h> #include <linux/netdevice.h>
#include <linux/etherdevice.h> #include <linux/etherdevice.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
...@@ -1145,7 +1146,7 @@ static int __devinit ks8842_probe(struct platform_device *pdev) ...@@ -1145,7 +1146,7 @@ static int __devinit ks8842_probe(struct platform_device *pdev)
struct resource *iomem; struct resource *iomem;
struct net_device *netdev; struct net_device *netdev;
struct ks8842_adapter *adapter; struct ks8842_adapter *adapter;
struct ks8842_platform_data *pdata = pdev->dev.platform_data; struct ks8842_platform_data *pdata = mfd_get_data(pdev);
u16 id; u16 id;
unsigned i; unsigned i;
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/mfd/core.h>
#include <linux/spi/spi.h> #include <linux/spi/spi.h>
#include <linux/spi/spi_bitbang.h> #include <linux/spi/spi_bitbang.h>
#include <linux/spi/xilinx_spi.h> #include <linux/spi/xilinx_spi.h>
...@@ -470,7 +471,7 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev) ...@@ -470,7 +471,7 @@ static int __devinit xilinx_spi_probe(struct platform_device *dev)
struct spi_master *master; struct spi_master *master;
u8 i; u8 i;
pdata = dev->dev.platform_data; pdata = mfd_get_data(dev);
if (pdata) { if (pdata) {
num_cs = pdata->num_chipselect; num_cs = pdata->num_chipselect;
little_endian = pdata->little_endian; little_endian = pdata->little_endian;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment