Commit a521422ea4ae6128474f7705f02f6ab5cebf8675

Authored by Magnus Damm
Committed by Simon Horman
1 parent 040d64d6e0

ARM: shmobile: mackerel: Remove Legacy C board code

Remove legacy C code for the sh7372 Mackerel board. There is no
DT multiplatform implementation available for the sh7372 SoC so
simply phase out the board and SoC code support.

Signed-off-by: Magnus Damm <damm+renesas@opensource.se>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>

Showing 4 changed files with 0 additions and 1533 deletions Side-by-side Diff

arch/arm/mach-shmobile/Kconfig
... ... @@ -154,15 +154,6 @@
154 154  
155 155 This is intended to aid developers
156 156  
157   -config MACH_MACKEREL
158   - bool "mackerel board"
159   - depends on ARCH_SH7372
160   - select ARCH_REQUIRE_GPIOLIB
161   - select REGULATOR_FIXED_VOLTAGE if REGULATOR
162   - select SMSC_PHY if SMSC911X
163   - select SND_SOC_AK4642 if SND_SIMPLE_CARD
164   - select USE_OF
165   -
166 157 config MACH_ARMADILLO800EVA
167 158 bool "Armadillo-800 EVA board"
168 159 depends on ARCH_R8A7740
arch/arm/mach-shmobile/Makefile
... ... @@ -60,7 +60,6 @@
60 60 else
61 61 obj-$(CONFIG_MACH_APE6EVM) += board-ape6evm.o
62 62 obj-$(CONFIG_MACH_APE6EVM_REFERENCE) += board-ape6evm-reference.o
63   -obj-$(CONFIG_MACH_MACKEREL) += board-mackerel.o
64 63 obj-$(CONFIG_MACH_BOCKW) += board-bockw.o
65 64 obj-$(CONFIG_MACH_BOCKW_REFERENCE) += board-bockw-reference.o
66 65 obj-$(CONFIG_MACH_MARZEN) += board-marzen.o
arch/arm/mach-shmobile/Makefile.boot
... ... @@ -7,7 +7,6 @@
7 7 loadaddr-$(CONFIG_MACH_BOCKW_REFERENCE) += 0x60008000
8 8 loadaddr-$(CONFIG_MACH_KZM9G) += 0x41008000
9 9 loadaddr-$(CONFIG_MACH_KZM9G_REFERENCE) += 0x41008000
10   -loadaddr-$(CONFIG_MACH_MACKEREL) += 0x40008000
11 10 loadaddr-$(CONFIG_MACH_MARZEN) += 0x60008000
12 11  
13 12 __ZRELADDR := $(sort $(loadaddr-y))
arch/arm/mach-shmobile/board-mackerel.c
Changes suppressed. Click to show
1   -/*
2   - * mackerel board support
3   - *
4   - * Copyright (C) 2010 Renesas Solutions Corp.
5   - * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6   - *
7   - * based on ap4evb
8   - * Copyright (C) 2010 Magnus Damm
9   - * Copyright (C) 2008 Yoshihiro Shimoda
10   - *
11   - * This program is free software; you can redistribute it and/or modify
12   - * it under the terms of the GNU General Public License as published by
13   - * the Free Software Foundation; version 2 of the License.
14   - *
15   - * This program is distributed in the hope that it will be useful,
16   - * but WITHOUT ANY WARRANTY; without even the implied warranty of
17   - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18   - * GNU General Public License for more details.
19   - */
20   -#include <linux/delay.h>
21   -#include <linux/kernel.h>
22   -#include <linux/init.h>
23   -#include <linux/interrupt.h>
24   -#include <linux/irq.h>
25   -#include <linux/platform_device.h>
26   -#include <linux/gpio.h>
27   -#include <linux/input.h>
28   -#include <linux/io.h>
29   -#include <linux/i2c.h>
30   -#include <linux/leds.h>
31   -#include <linux/mfd/tmio.h>
32   -#include <linux/mmc/host.h>
33   -#include <linux/mmc/sh_mmcif.h>
34   -#include <linux/mmc/sh_mobile_sdhi.h>
35   -#include <linux/mtd/mtd.h>
36   -#include <linux/mtd/partitions.h>
37   -#include <linux/mtd/physmap.h>
38   -#include <linux/mtd/sh_flctl.h>
39   -#include <linux/pinctrl/machine.h>
40   -#include <linux/pinctrl/pinconf-generic.h>
41   -#include <linux/platform_data/gpio_backlight.h>
42   -#include <linux/pm_clock.h>
43   -#include <linux/regulator/fixed.h>
44   -#include <linux/regulator/machine.h>
45   -#include <linux/smsc911x.h>
46   -#include <linux/sh_clk.h>
47   -#include <linux/tca6416_keypad.h>
48   -#include <linux/usb/renesas_usbhs.h>
49   -#include <linux/dma-mapping.h>
50   -
51   -#include <video/sh_mobile_hdmi.h>
52   -#include <video/sh_mobile_lcdc.h>
53   -#include <media/sh_mobile_ceu.h>
54   -#include <media/soc_camera.h>
55   -#include <media/soc_camera_platform.h>
56   -#include <sound/sh_fsi.h>
57   -#include <sound/simple_card.h>
58   -#include <asm/mach/arch.h>
59   -#include <asm/mach-types.h>
60   -
61   -#include "common.h"
62   -#include "intc.h"
63   -#include "irqs.h"
64   -#include "pm-rmobile.h"
65   -#include "sh-gpio.h"
66   -#include "sh7372.h"
67   -
68   -/*
69   - * Address Interface BusWidth note
70   - * ------------------------------------------------------------------
71   - * 0x0000_0000 NOR Flash ROM (MCP) 16bit SW7 : bit1 = ON
72   - * 0x0800_0000 user area -
73   - * 0x1000_0000 NOR Flash ROM (MCP) 16bit SW7 : bit1 = OFF
74   - * 0x1400_0000 Ether (LAN9220) 16bit
75   - * 0x1600_0000 user area - cannot use with NAND
76   - * 0x1800_0000 user area -
77   - * 0x1A00_0000 -
78   - * 0x4000_0000 LPDDR2-SDRAM (POP) 32bit
79   - */
80   -
81   -/*
82   - * CPU mode
83   - *
84   - * SW4 | Boot Area| Master | Remarks
85   - * 1 | 2 | 3 | 4 | 5 | 6 | 8 | | Processor|
86   - * ----+-----+-----+-----+-----+-----+-----+----------+----------+--------------
87   - * ON | ON | OFF | ON | ON | OFF | OFF | External | System | External ROM
88   - * ON | ON | ON | ON | ON | OFF | OFF | External | System | ROM Debug
89   - * ON | ON | X | ON | OFF | OFF | OFF | Built-in | System | ROM Debug
90   - * X | OFF | X | X | X | X | OFF | Built-in | System | MaskROM
91   - * OFF | X | X | X | X | X | OFF | Built-in | System | MaskROM
92   - * X | X | X | OFF | X | X | OFF | Built-in | System | MaskROM
93   - * OFF | ON | OFF | X | X | OFF | ON | External | System | Standalone
94   - * ON | OFF | OFF | X | X | OFF | ON | External | Realtime | Standalone
95   -*/
96   -
97   -/*
98   - * NOR Flash ROM
99   - *
100   - * SW1 | SW2 | SW7 | NOR Flash ROM
101   - * bit1 | bit1 bit2 | bit1 | Memory allocation
102   - * ------+------------+------+------------------
103   - * OFF | ON OFF | ON | Area 0
104   - * OFF | ON OFF | OFF | Area 4
105   - */
106   -
107   -/*
108   - * SMSC 9220
109   - *
110   - * SW1 SMSC 9220
111   - * -----------------------
112   - * ON access disable
113   - * OFF access enable
114   - */
115   -
116   -/*
117   - * NAND Flash ROM
118   - *
119   - * SW1 | SW2 | SW7 | NAND Flash ROM
120   - * bit1 | bit1 bit2 | bit2 | Memory allocation
121   - * ------+------------+------+------------------
122   - * OFF | ON OFF | ON | FCE 0
123   - * OFF | ON OFF | OFF | FCE 1
124   - */
125   -
126   -/*
127   - * External interrupt pin settings
128   - *
129   - * IRQX | pin setting | device | level
130   - * ------+--------------------+--------------------+-------
131   - * IRQ0 | ICR1A.IRQ0SA=0010 | SDHI2 card detect | Low
132   - * IRQ6 | ICR1A.IRQ6SA=0011 | Ether(LAN9220) | High
133   - * IRQ7 | ICR1A.IRQ7SA=0010 | LCD Touch Panel | Low
134   - * IRQ8 | ICR2A.IRQ8SA=0010 | MMC/SD card detect | Low
135   - * IRQ9 | ICR2A.IRQ9SA=0010 | KEY(TCA6408) | Low
136   - * IRQ21 | ICR4A.IRQ21SA=0011 | Sensor(ADXL345) | High
137   - * IRQ22 | ICR4A.IRQ22SA=0011 | Sensor(AK8975) | High
138   - */
139   -
140   -/*
141   - * USB
142   - *
143   - * USB0 : CN22 : Function
144   - * USB1 : CN31 : Function/Host *1
145   - *
146   - * J30 (for CN31) *1
147   - * ----------+---------------+-------------
148   - * 1-2 short | VBUS 5V | Host
149   - * open | external VBUS | Function
150   - *
151   - * CAUTION
152   - *
153   - * renesas_usbhs driver can use external interrupt mode
154   - * (which come from USB-PHY) or autonomy mode (it use own interrupt)
155   - * for detecting connection/disconnection when Function.
156   - * USB will be power OFF while it has been disconnecting
157   - * if external interrupt mode, and it is always power ON if autonomy mode,
158   - *
159   - * mackerel can not use external interrupt (IRQ7-PORT167) mode on "USB0",
160   - * because Touchscreen is using IRQ7-PORT40.
161   - * It is impossible to use IRQ7 demux on this board.
162   - */
163   -
164   -/*
165   - * SDHI0 (CN12)
166   - *
167   - * SW56 : OFF
168   - *
169   - */
170   -
171   -/* MMC /SDHI1 (CN7)
172   - *
173   - * I/O voltage : 1.8v
174   - *
175   - * Power voltage : 1.8v or 3.3v
176   - * J22 : select power voltage *1
177   - * 1-2 pin : 1.8v
178   - * 2-3 pin : 3.3v
179   - *
180   - * *1
181   - * Please change J22 depends the card to be used.
182   - * MMC's OCR field set to support either voltage for the card inserted.
183   - *
184   - * SW1 | SW33
185   - * | bit1 | bit2 | bit3 | bit4
186   - * -------------+------+------+------+-------
187   - * MMC0 OFF | OFF | X | ON | X (Use MMCIF)
188   - * SDHI1 OFF | ON | X | OFF | X (Use MFD_SH_MOBILE_SDHI)
189   - *
190   - */
191   -
192   -/*
193   - * SDHI2 (CN23)
194   - *
195   - * microSD card sloct
196   - *
197   - */
198   -
199   -/*
200   - * FSI - AK4642
201   - *
202   - * it needs amixer settings for playing
203   - *
204   - * amixer set "Headphone Enable" on
205   - */
206   -
207   -/* Fixed 3.3V and 1.8V regulators to be used by multiple devices */
208   -static struct regulator_consumer_supply fixed1v8_power_consumers[] =
209   -{
210   - /*
211   - * J22 on mackerel switches mmcif.0 and sdhi.1 between 1.8V and 3.3V
212   - * Since we cannot support both voltages, we support the default 1.8V
213   - */
214   - REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"),
215   - REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.1"),
216   - REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"),
217   - REGULATOR_SUPPLY("vqmmc", "sh_mmcif.0"),
218   -};
219   -
220   -static struct regulator_consumer_supply fixed3v3_power_consumers[] =
221   -{
222   - REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"),
223   - REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.0"),
224   - REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.2"),
225   - REGULATOR_SUPPLY("vqmmc", "sh_mobile_sdhi.2"),
226   -};
227   -
228   -/* Dummy supplies, where voltage doesn't matter */
229   -static struct regulator_consumer_supply dummy_supplies[] = {
230   - REGULATOR_SUPPLY("vddvario", "smsc911x"),
231   - REGULATOR_SUPPLY("vdd33a", "smsc911x"),
232   -};
233   -
234   -/* MTD */
235   -static struct mtd_partition nor_flash_partitions[] = {
236   - {
237   - .name = "loader",
238   - .offset = 0x00000000,
239   - .size = 512 * 1024,
240   - .mask_flags = MTD_WRITEABLE,
241   - },
242   - {
243   - .name = "bootenv",
244   - .offset = MTDPART_OFS_APPEND,
245   - .size = 512 * 1024,
246   - .mask_flags = MTD_WRITEABLE,
247   - },
248   - {
249   - .name = "kernel_ro",
250   - .offset = MTDPART_OFS_APPEND,
251   - .size = 8 * 1024 * 1024,
252   - .mask_flags = MTD_WRITEABLE,
253   - },
254   - {
255   - .name = "kernel",
256   - .offset = MTDPART_OFS_APPEND,
257   - .size = 8 * 1024 * 1024,
258   - },
259   - {
260   - .name = "data",
261   - .offset = MTDPART_OFS_APPEND,
262   - .size = MTDPART_SIZ_FULL,
263   - },
264   -};
265   -
266   -static struct physmap_flash_data nor_flash_data = {
267   - .width = 2,
268   - .parts = nor_flash_partitions,
269   - .nr_parts = ARRAY_SIZE(nor_flash_partitions),
270   -};
271   -
272   -static struct resource nor_flash_resources[] = {
273   - [0] = {
274   - .start = 0x20000000, /* CS0 shadow instead of regular CS0 */
275   - .end = 0x28000000 - 1, /* needed by USB MASK ROM boot */
276   - .flags = IORESOURCE_MEM,
277   - }
278   -};
279   -
280   -static struct platform_device nor_flash_device = {
281   - .name = "physmap-flash",
282   - .dev = {
283   - .platform_data = &nor_flash_data,
284   - },
285   - .num_resources = ARRAY_SIZE(nor_flash_resources),
286   - .resource = nor_flash_resources,
287   -};
288   -
289   -/* SMSC */
290   -static struct resource smc911x_resources[] = {
291   - {
292   - .start = 0x14000000,
293   - .end = 0x16000000 - 1,
294   - .flags = IORESOURCE_MEM,
295   - }, {
296   - .start = evt2irq(0x02c0) /* IRQ6A */,
297   - .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
298   - },
299   -};
300   -
301   -static struct smsc911x_platform_config smsc911x_info = {
302   - .flags = SMSC911X_USE_16BIT | SMSC911X_SAVE_MAC_ADDRESS,
303   - .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
304   - .irq_type = SMSC911X_IRQ_TYPE_PUSH_PULL,
305   -};
306   -
307   -static struct platform_device smc911x_device = {
308   - .name = "smsc911x",
309   - .id = -1,
310   - .num_resources = ARRAY_SIZE(smc911x_resources),
311   - .resource = smc911x_resources,
312   - .dev = {
313   - .platform_data = &smsc911x_info,
314   - },
315   -};
316   -
317   -/* MERAM */
318   -static struct sh_mobile_meram_info mackerel_meram_info = {
319   - .addr_mode = SH_MOBILE_MERAM_MODE1,
320   -};
321   -
322   -static struct resource meram_resources[] = {
323   - [0] = {
324   - .name = "regs",
325   - .start = 0xe8000000,
326   - .end = 0xe807ffff,
327   - .flags = IORESOURCE_MEM,
328   - },
329   - [1] = {
330   - .name = "meram",
331   - .start = 0xe8080000,
332   - .end = 0xe81fffff,
333   - .flags = IORESOURCE_MEM,
334   - },
335   -};
336   -
337   -static struct platform_device meram_device = {
338   - .name = "sh_mobile_meram",
339   - .id = 0,
340   - .num_resources = ARRAY_SIZE(meram_resources),
341   - .resource = meram_resources,
342   - .dev = {
343   - .platform_data = &mackerel_meram_info,
344   - },
345   -};
346   -
347   -/* LCDC and backlight */
348   -static struct fb_videomode mackerel_lcdc_modes[] = {
349   - {
350   - .name = "WVGA Panel",
351   - .xres = 800,
352   - .yres = 480,
353   - .left_margin = 220,
354   - .right_margin = 110,
355   - .hsync_len = 70,
356   - .upper_margin = 20,
357   - .lower_margin = 5,
358   - .vsync_len = 5,
359   - .sync = 0,
360   - },
361   -};
362   -
363   -static const struct sh_mobile_meram_cfg lcd_meram_cfg = {
364   - .icb[0] = {
365   - .meram_size = 0x40,
366   - },
367   - .icb[1] = {
368   - .meram_size = 0x40,
369   - },
370   -};
371   -
372   -static struct sh_mobile_lcdc_info lcdc_info = {
373   - .meram_dev = &mackerel_meram_info,
374   - .clock_source = LCDC_CLK_BUS,
375   - .ch[0] = {
376   - .chan = LCDC_CHAN_MAINLCD,
377   - .fourcc = V4L2_PIX_FMT_RGB565,
378   - .lcd_modes = mackerel_lcdc_modes,
379   - .num_modes = ARRAY_SIZE(mackerel_lcdc_modes),
380   - .interface_type = RGB24,
381   - .clock_divider = 3,
382   - .flags = 0,
383   - .panel_cfg = {
384   - .width = 152,
385   - .height = 91,
386   - },
387   - .meram_cfg = &lcd_meram_cfg,
388   - }
389   -};
390   -
391   -static struct resource lcdc_resources[] = {
392   - [0] = {
393   - .name = "LCDC",
394   - .start = 0xfe940000,
395   - .end = 0xfe943fff,
396   - .flags = IORESOURCE_MEM,
397   - },
398   - [1] = {
399   - .start = intcs_evt2irq(0x580),
400   - .flags = IORESOURCE_IRQ,
401   - },
402   -};
403   -
404   -static struct platform_device lcdc_device = {
405   - .name = "sh_mobile_lcdc_fb",
406   - .num_resources = ARRAY_SIZE(lcdc_resources),
407   - .resource = lcdc_resources,
408   - .dev = {
409   - .platform_data = &lcdc_info,
410   - .coherent_dma_mask = DMA_BIT_MASK(32),
411   - },
412   -};
413   -
414   -static struct gpio_backlight_platform_data gpio_backlight_data = {
415   - .fbdev = &lcdc_device.dev,
416   - .gpio = 31,
417   - .def_value = 1,
418   - .name = "backlight",
419   -};
420   -
421   -static struct platform_device gpio_backlight_device = {
422   - .name = "gpio-backlight",
423   - .dev = {
424   - .platform_data = &gpio_backlight_data,
425   - },
426   -};
427   -
428   -/* HDMI */
429   -static struct sh_mobile_hdmi_info hdmi_info = {
430   - .flags = HDMI_SND_SRC_SPDIF,
431   -};
432   -
433   -static struct resource hdmi_resources[] = {
434   - [0] = {
435   - .name = "HDMI",
436   - .start = 0xe6be0000,
437   - .end = 0xe6be00ff,
438   - .flags = IORESOURCE_MEM,
439   - },
440   - [1] = {
441   - /* There's also an HDMI interrupt on INTCS @ 0x18e0 */
442   - .start = evt2irq(0x17e0),
443   - .flags = IORESOURCE_IRQ,
444   - },
445   -};
446   -
447   -static struct platform_device hdmi_device = {
448   - .name = "sh-mobile-hdmi",
449   - .num_resources = ARRAY_SIZE(hdmi_resources),
450   - .resource = hdmi_resources,
451   - .id = -1,
452   - .dev = {
453   - .platform_data = &hdmi_info,
454   - },
455   -};
456   -
457   -static const struct sh_mobile_meram_cfg hdmi_meram_cfg = {
458   - .icb[0] = {
459   - .meram_size = 0x100,
460   - },
461   - .icb[1] = {
462   - .meram_size = 0x100,
463   - },
464   -};
465   -
466   -static struct sh_mobile_lcdc_info hdmi_lcdc_info = {
467   - .meram_dev = &mackerel_meram_info,
468   - .clock_source = LCDC_CLK_EXTERNAL,
469   - .ch[0] = {
470   - .chan = LCDC_CHAN_MAINLCD,
471   - .fourcc = V4L2_PIX_FMT_RGB565,
472   - .interface_type = RGB24,
473   - .clock_divider = 1,
474   - .flags = LCDC_FLAGS_DWPOL,
475   - .meram_cfg = &hdmi_meram_cfg,
476   - .tx_dev = &hdmi_device,
477   - }
478   -};
479   -
480   -static struct resource hdmi_lcdc_resources[] = {
481   - [0] = {
482   - .name = "LCDC1",
483   - .start = 0xfe944000,
484   - .end = 0xfe947fff,
485   - .flags = IORESOURCE_MEM,
486   - },
487   - [1] = {
488   - .start = intcs_evt2irq(0x1780),
489   - .flags = IORESOURCE_IRQ,
490   - },
491   -};
492   -
493   -static struct platform_device hdmi_lcdc_device = {
494   - .name = "sh_mobile_lcdc_fb",
495   - .num_resources = ARRAY_SIZE(hdmi_lcdc_resources),
496   - .resource = hdmi_lcdc_resources,
497   - .id = 1,
498   - .dev = {
499   - .platform_data = &hdmi_lcdc_info,
500   - .coherent_dma_mask = DMA_BIT_MASK(32),
501   - },
502   -};
503   -
504   -static struct asoc_simple_card_info fsi2_hdmi_info = {
505   - .name = "HDMI",
506   - .card = "FSI2B-HDMI",
507   - .codec = "sh-mobile-hdmi",
508   - .platform = "sh_fsi2",
509   - .daifmt = SND_SOC_DAIFMT_CBS_CFS,
510   - .cpu_dai = {
511   - .name = "fsib-dai",
512   - },
513   - .codec_dai = {
514   - .name = "sh_mobile_hdmi-hifi",
515   - },
516   -};
517   -
518   -static struct platform_device fsi_hdmi_device = {
519   - .name = "asoc-simple-card",
520   - .id = 1,
521   - .dev = {
522   - .platform_data = &fsi2_hdmi_info,
523   - .coherent_dma_mask = DMA_BIT_MASK(32),
524   - .dma_mask = &fsi_hdmi_device.dev.coherent_dma_mask,
525   - },
526   -};
527   -
528   -static void __init hdmi_init_pm_clock(void)
529   -{
530   - struct clk *hdmi_ick = clk_get(&hdmi_device.dev, "ick");
531   - int ret;
532   - long rate;
533   -
534   - if (IS_ERR(hdmi_ick)) {
535   - ret = PTR_ERR(hdmi_ick);
536   - pr_err("Cannot get HDMI ICK: %d\n", ret);
537   - goto out;
538   - }
539   -
540   - ret = clk_set_parent(&sh7372_pllc2_clk, &sh7372_dv_clki_div2_clk);
541   - if (ret < 0) {
542   - pr_err("Cannot set PLLC2 parent: %d, %d users\n",
543   - ret, sh7372_pllc2_clk.usecount);
544   - goto out;
545   - }
546   -
547   - pr_debug("PLLC2 initial frequency %lu\n",
548   - clk_get_rate(&sh7372_pllc2_clk));
549   -
550   - rate = clk_round_rate(&sh7372_pllc2_clk, 594000000);
551   - if (rate <= 0) {
552   - pr_err("Cannot get suitable rate: %ld\n", rate);
553   - ret = -EINVAL;
554   - goto out;
555   - }
556   -
557   - ret = clk_set_rate(&sh7372_pllc2_clk, rate);
558   - if (ret < 0) {
559   - pr_err("Cannot set rate %ld: %d\n", rate, ret);
560   - goto out;
561   - }
562   -
563   - pr_debug("PLLC2 set frequency %lu\n", rate);
564   -
565   - ret = clk_set_parent(hdmi_ick, &sh7372_pllc2_clk);
566   - if (ret < 0)
567   - pr_err("Cannot set HDMI parent: %d\n", ret);
568   -
569   -out:
570   - if (!IS_ERR(hdmi_ick))
571   - clk_put(hdmi_ick);
572   -}
573   -
574   -/* USBHS0 is connected to CN22 which takes a USB Mini-B plug
575   - *
576   - * The sh7372 SoC has IRQ7 set aside for USBHS0 hotplug,
577   - * but on this particular board IRQ7 is already used by
578   - * the touch screen. This leaves us with software polling.
579   - */
580   -#define USBHS0_POLL_INTERVAL (HZ * 5)
581   -
582   -struct usbhs_private {
583   - void __iomem *usbphyaddr;
584   - void __iomem *usbcrcaddr;
585   - struct renesas_usbhs_platform_info info;
586   - struct delayed_work work;
587   - struct platform_device *pdev;
588   -};
589   -
590   -#define usbhs_get_priv(pdev) \
591   - container_of(renesas_usbhs_get_info(pdev), \
592   - struct usbhs_private, info)
593   -
594   -#define usbhs_is_connected(priv) \
595   - (!((1 << 7) & __raw_readw(priv->usbcrcaddr)))
596   -
597   -static int usbhs_get_vbus(struct platform_device *pdev)
598   -{
599   - return usbhs_is_connected(usbhs_get_priv(pdev));
600   -}
601   -
602   -static int usbhs_phy_reset(struct platform_device *pdev)
603   -{
604   - struct usbhs_private *priv = usbhs_get_priv(pdev);
605   -
606   - /* init phy */
607   - __raw_writew(0x8a0a, priv->usbcrcaddr);
608   -
609   - return 0;
610   -}
611   -
612   -static int usbhs0_get_id(struct platform_device *pdev)
613   -{
614   - return USBHS_GADGET;
615   -}
616   -
617   -static void usbhs0_work_function(struct work_struct *work)
618   -{
619   - struct usbhs_private *priv = container_of(work, struct usbhs_private,
620   - work.work);
621   -
622   - renesas_usbhs_call_notify_hotplug(priv->pdev);
623   - schedule_delayed_work(&priv->work, USBHS0_POLL_INTERVAL);
624   -}
625   -
626   -static int usbhs0_hardware_init(struct platform_device *pdev)
627   -{
628   - struct usbhs_private *priv = usbhs_get_priv(pdev);
629   -
630   - priv->pdev = pdev;
631   - INIT_DELAYED_WORK(&priv->work, usbhs0_work_function);
632   - schedule_delayed_work(&priv->work, USBHS0_POLL_INTERVAL);
633   - return 0;
634   -}
635   -
636   -static int usbhs0_hardware_exit(struct platform_device *pdev)
637   -{
638   - struct usbhs_private *priv = usbhs_get_priv(pdev);
639   -
640   - cancel_delayed_work_sync(&priv->work);
641   -
642   - return 0;
643   -}
644   -
645   -static struct usbhs_private usbhs0_private = {
646   - .usbcrcaddr = IOMEM(0xe605810c), /* USBCR2 */
647   - .info = {
648   - .platform_callback = {
649   - .hardware_init = usbhs0_hardware_init,
650   - .hardware_exit = usbhs0_hardware_exit,
651   - .phy_reset = usbhs_phy_reset,
652   - .get_id = usbhs0_get_id,
653   - .get_vbus = usbhs_get_vbus,
654   - },
655   - .driver_param = {
656   - .buswait_bwait = 4,
657   - .d0_tx_id = SHDMA_SLAVE_USB0_TX,
658   - .d1_rx_id = SHDMA_SLAVE_USB0_RX,
659   - },
660   - },
661   -};
662   -
663   -static struct resource usbhs0_resources[] = {
664   - [0] = {
665   - .name = "USBHS0",
666   - .start = 0xe6890000,
667   - .end = 0xe68900e6 - 1,
668   - .flags = IORESOURCE_MEM,
669   - },
670   - [1] = {
671   - .start = evt2irq(0x1ca0) /* USB0_USB0I0 */,
672   - .flags = IORESOURCE_IRQ,
673   - },
674   -};
675   -
676   -static struct platform_device usbhs0_device = {
677   - .name = "renesas_usbhs",
678   - .id = 0,
679   - .dev = {
680   - .platform_data = &usbhs0_private.info,
681   - },
682   - .num_resources = ARRAY_SIZE(usbhs0_resources),
683   - .resource = usbhs0_resources,
684   -};
685   -
686   -/* USBHS1 is connected to CN31 which takes a USB Mini-AB plug
687   - *
688   - * Use J30 to select between Host and Function. This setting
689   - * can however not be detected by software. Hotplug of USBHS1
690   - * is provided via IRQ8.
691   - *
692   - * Current USB1 works as "USB Host".
693   - * - set J30 "short"
694   - *
695   - * If you want to use it as "USB gadget",
696   - * - J30 "open"
697   - * - modify usbhs1_get_id() USBHS_HOST -> USBHS_GADGET
698   - * - add .get_vbus = usbhs_get_vbus in usbhs1_private
699   - * - check usbhs0_device(pio)/usbhs1_device(irq) order in mackerel_devices.
700   - */
701   -#define IRQ8 evt2irq(0x0300)
702   -#define USB_PHY_MODE (1 << 4)
703   -#define USB_PHY_INT_EN ((1 << 3) | (1 << 2))
704   -#define USB_PHY_ON (1 << 1)
705   -#define USB_PHY_OFF (1 << 0)
706   -#define USB_PHY_INT_CLR (USB_PHY_ON | USB_PHY_OFF)
707   -
708   -static irqreturn_t usbhs1_interrupt(int irq, void *data)
709   -{
710   - struct platform_device *pdev = data;
711   - struct usbhs_private *priv = usbhs_get_priv(pdev);
712   -
713   - dev_dbg(&pdev->dev, "%s\n", __func__);
714   -
715   - renesas_usbhs_call_notify_hotplug(pdev);
716   -
717   - /* clear status */
718   - __raw_writew(__raw_readw(priv->usbphyaddr) | USB_PHY_INT_CLR,
719   - priv->usbphyaddr);
720   -
721   - return IRQ_HANDLED;
722   -}
723   -
724   -static int usbhs1_hardware_init(struct platform_device *pdev)
725   -{
726   - struct usbhs_private *priv = usbhs_get_priv(pdev);
727   - int ret;
728   -
729   - /* clear interrupt status */
730   - __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr);
731   -
732   - ret = request_irq(IRQ8, usbhs1_interrupt, IRQF_TRIGGER_HIGH,
733   - dev_name(&pdev->dev), pdev);
734   - if (ret) {
735   - dev_err(&pdev->dev, "request_irq err\n");
736   - return ret;
737   - }
738   -
739   - /* enable USB phy interrupt */
740   - __raw_writew(USB_PHY_MODE | USB_PHY_INT_EN, priv->usbphyaddr);
741   -
742   - return 0;
743   -}
744   -
745   -static int usbhs1_hardware_exit(struct platform_device *pdev)
746   -{
747   - struct usbhs_private *priv = usbhs_get_priv(pdev);
748   -
749   - /* clear interrupt status */
750   - __raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr);
751   -
752   - free_irq(IRQ8, pdev);
753   -
754   - return 0;
755   -}
756   -
757   -static int usbhs1_get_id(struct platform_device *pdev)
758   -{
759   - return USBHS_HOST;
760   -}
761   -
762   -static u32 usbhs1_pipe_cfg[] = {
763   - USB_ENDPOINT_XFER_CONTROL,
764   - USB_ENDPOINT_XFER_ISOC,
765   - USB_ENDPOINT_XFER_ISOC,
766   - USB_ENDPOINT_XFER_BULK,
767   - USB_ENDPOINT_XFER_BULK,
768   - USB_ENDPOINT_XFER_BULK,
769   - USB_ENDPOINT_XFER_INT,
770   - USB_ENDPOINT_XFER_INT,
771   - USB_ENDPOINT_XFER_INT,
772   - USB_ENDPOINT_XFER_BULK,
773   - USB_ENDPOINT_XFER_BULK,
774   - USB_ENDPOINT_XFER_BULK,
775   - USB_ENDPOINT_XFER_BULK,
776   - USB_ENDPOINT_XFER_BULK,
777   - USB_ENDPOINT_XFER_BULK,
778   - USB_ENDPOINT_XFER_BULK,
779   -};
780   -
781   -static struct usbhs_private usbhs1_private = {
782   - .usbphyaddr = IOMEM(0xe60581e2), /* USBPHY1INTAP */
783   - .usbcrcaddr = IOMEM(0xe6058130), /* USBCR4 */
784   - .info = {
785   - .platform_callback = {
786   - .hardware_init = usbhs1_hardware_init,
787   - .hardware_exit = usbhs1_hardware_exit,
788   - .get_id = usbhs1_get_id,
789   - .phy_reset = usbhs_phy_reset,
790   - },
791   - .driver_param = {
792   - .buswait_bwait = 4,
793   - .has_otg = 1,
794   - .pipe_type = usbhs1_pipe_cfg,
795   - .pipe_size = ARRAY_SIZE(usbhs1_pipe_cfg),
796   - .d0_tx_id = SHDMA_SLAVE_USB1_TX,
797   - .d1_rx_id = SHDMA_SLAVE_USB1_RX,
798   - },
799   - },
800   -};
801   -
802   -static struct resource usbhs1_resources[] = {
803   - [0] = {
804   - .name = "USBHS1",
805   - .start = 0xe68b0000,
806   - .end = 0xe68b00e6 - 1,
807   - .flags = IORESOURCE_MEM,
808   - },
809   - [1] = {
810   - .start = evt2irq(0x1ce0) /* USB1_USB1I0 */,
811   - .flags = IORESOURCE_IRQ,
812   - },
813   -};
814   -
815   -static struct platform_device usbhs1_device = {
816   - .name = "renesas_usbhs",
817   - .id = 1,
818   - .dev = {
819   - .platform_data = &usbhs1_private.info,
820   - .dma_mask = &usbhs1_device.dev.coherent_dma_mask,
821   - .coherent_dma_mask = DMA_BIT_MASK(32),
822   - },
823   - .num_resources = ARRAY_SIZE(usbhs1_resources),
824   - .resource = usbhs1_resources,
825   -};
826   -
827   -/* LED */
828   -static struct gpio_led mackerel_leds[] = {
829   - {
830   - .name = "led0",
831   - .gpio = 0,
832   - .default_state = LEDS_GPIO_DEFSTATE_ON,
833   - },
834   - {
835   - .name = "led1",
836   - .gpio = 1,
837   - .default_state = LEDS_GPIO_DEFSTATE_ON,
838   - },
839   - {
840   - .name = "led2",
841   - .gpio = 2,
842   - .default_state = LEDS_GPIO_DEFSTATE_ON,
843   - },
844   - {
845   - .name = "led3",
846   - .gpio = 159,
847   - .default_state = LEDS_GPIO_DEFSTATE_ON,
848   - }
849   -};
850   -
851   -static struct gpio_led_platform_data mackerel_leds_pdata = {
852   - .leds = mackerel_leds,
853   - .num_leds = ARRAY_SIZE(mackerel_leds),
854   -};
855   -
856   -static struct platform_device leds_device = {
857   - .name = "leds-gpio",
858   - .id = 0,
859   - .dev = {
860   - .platform_data = &mackerel_leds_pdata,
861   - },
862   -};
863   -
864   -/* FSI */
865   -#define IRQ_FSI evt2irq(0x1840)
866   -static struct sh_fsi_platform_info fsi_info = {
867   - .port_a = {
868   - .tx_id = SHDMA_SLAVE_FSIA_TX,
869   - .rx_id = SHDMA_SLAVE_FSIA_RX,
870   - },
871   - .port_b = {
872   - .flags = SH_FSI_CLK_CPG |
873   - SH_FSI_FMT_SPDIF,
874   - }
875   -};
876   -
877   -static struct resource fsi_resources[] = {
878   - [0] = {
879   - /* we need 0xFE1F0000 to access DMA
880   - * instead of 0xFE3C0000 */
881   - .name = "FSI",
882   - .start = 0xFE1F0000,
883   - .end = 0xFE1F0400 - 1,
884   - .flags = IORESOURCE_MEM,
885   - },
886   - [1] = {
887   - .start = IRQ_FSI,
888   - .flags = IORESOURCE_IRQ,
889   - },
890   -};
891   -
892   -static struct platform_device fsi_device = {
893   - .name = "sh_fsi2",
894   - .id = -1,
895   - .num_resources = ARRAY_SIZE(fsi_resources),
896   - .resource = fsi_resources,
897   - .dev = {
898   - .platform_data = &fsi_info,
899   - },
900   -};
901   -
902   -static struct asoc_simple_card_info fsi2_ak4643_info = {
903   - .name = "AK4643",
904   - .card = "FSI2A-AK4643",
905   - .codec = "ak4642-codec.0-0013",
906   - .platform = "sh_fsi2",
907   - .daifmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBM_CFM,
908   - .cpu_dai = {
909   - .name = "fsia-dai",
910   - },
911   - .codec_dai = {
912   - .name = "ak4642-hifi",
913   - .sysclk = 11289600,
914   - },
915   -};
916   -
917   -static struct platform_device fsi_ak4643_device = {
918   - .name = "asoc-simple-card",
919   - .dev = {
920   - .platform_data = &fsi2_ak4643_info,
921   - .coherent_dma_mask = DMA_BIT_MASK(32),
922   - .dma_mask = &fsi_ak4643_device.dev.coherent_dma_mask,
923   - },
924   -};
925   -
926   -/* FLCTL */
927   -static struct mtd_partition nand_partition_info[] = {
928   - {
929   - .name = "system",
930   - .offset = 0,
931   - .size = 128 * 1024 * 1024,
932   - },
933   - {
934   - .name = "userdata",
935   - .offset = MTDPART_OFS_APPEND,
936   - .size = 256 * 1024 * 1024,
937   - },
938   - {
939   - .name = "cache",
940   - .offset = MTDPART_OFS_APPEND,
941   - .size = 128 * 1024 * 1024,
942   - },
943   -};
944   -
945   -static struct resource nand_flash_resources[] = {
946   - [0] = {
947   - .start = 0xe6a30000,
948   - .end = 0xe6a3009b,
949   - .flags = IORESOURCE_MEM,
950   - },
951   - [1] = {
952   - .start = evt2irq(0x0d80), /* flstei: status error irq */
953   - .flags = IORESOURCE_IRQ,
954   - },
955   -};
956   -
957   -static struct sh_flctl_platform_data nand_flash_data = {
958   - .parts = nand_partition_info,
959   - .nr_parts = ARRAY_SIZE(nand_partition_info),
960   - .flcmncr_val = CLK_16B_12L_4H | TYPESEL_SET
961   - | SHBUSSEL | SEL_16BIT | SNAND_E,
962   - .use_holden = 1,
963   -};
964   -
965   -static struct platform_device nand_flash_device = {
966   - .name = "sh_flctl",
967   - .resource = nand_flash_resources,
968   - .num_resources = ARRAY_SIZE(nand_flash_resources),
969   - .dev = {
970   - .platform_data = &nand_flash_data,
971   - },
972   -};
973   -
974   -/* SDHI0 */
975   -static struct sh_mobile_sdhi_info sdhi0_info = {
976   - .dma_slave_tx = SHDMA_SLAVE_SDHI0_TX,
977   - .dma_slave_rx = SHDMA_SLAVE_SDHI0_RX,
978   - .tmio_flags = TMIO_MMC_USE_GPIO_CD,
979   - .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ,
980   - .cd_gpio = 172,
981   -};
982   -
983   -static struct resource sdhi0_resources[] = {
984   - {
985   - .name = "SDHI0",
986   - .start = 0xe6850000,
987   - .end = 0xe68500ff,
988   - .flags = IORESOURCE_MEM,
989   - }, {
990   - .name = SH_MOBILE_SDHI_IRQ_SDCARD,
991   - .start = evt2irq(0x0e20) /* SDHI0_SDHI0I1 */,
992   - .flags = IORESOURCE_IRQ,
993   - }, {
994   - .name = SH_MOBILE_SDHI_IRQ_SDIO,
995   - .start = evt2irq(0x0e40) /* SDHI0_SDHI0I2 */,
996   - .flags = IORESOURCE_IRQ,
997   - },
998   -};
999   -
1000   -static struct platform_device sdhi0_device = {
1001   - .name = "sh_mobile_sdhi",
1002   - .num_resources = ARRAY_SIZE(sdhi0_resources),
1003   - .resource = sdhi0_resources,
1004   - .id = 0,
1005   - .dev = {
1006   - .platform_data = &sdhi0_info,
1007   - },
1008   -};
1009   -
1010   -#if !IS_ENABLED(CONFIG_MMC_SH_MMCIF)
1011   -/* SDHI1 */
1012   -
1013   -/* GPIO 41 can trigger IRQ8, but it is used by USBHS1, we have to poll */
1014   -static struct sh_mobile_sdhi_info sdhi1_info = {
1015   - .dma_slave_tx = SHDMA_SLAVE_SDHI1_TX,
1016   - .dma_slave_rx = SHDMA_SLAVE_SDHI1_RX,
1017   - .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_USE_GPIO_CD,
1018   - .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
1019   - MMC_CAP_NEEDS_POLL,
1020   - .cd_gpio = 41,
1021   -};
1022   -
1023   -static struct resource sdhi1_resources[] = {
1024   - {
1025   - .name = "SDHI1",
1026   - .start = 0xe6860000,
1027   - .end = 0xe68600ff,
1028   - .flags = IORESOURCE_MEM,
1029   - }, {
1030   - .name = SH_MOBILE_SDHI_IRQ_SDCARD,
1031   - .start = evt2irq(0x0ea0), /* SDHI1_SDHI1I1 */
1032   - .flags = IORESOURCE_IRQ,
1033   - }, {
1034   - .name = SH_MOBILE_SDHI_IRQ_SDIO,
1035   - .start = evt2irq(0x0ec0), /* SDHI1_SDHI1I2 */
1036   - .flags = IORESOURCE_IRQ,
1037   - },
1038   -};
1039   -
1040   -static struct platform_device sdhi1_device = {
1041   - .name = "sh_mobile_sdhi",
1042   - .num_resources = ARRAY_SIZE(sdhi1_resources),
1043   - .resource = sdhi1_resources,
1044   - .id = 1,
1045   - .dev = {
1046   - .platform_data = &sdhi1_info,
1047   - },
1048   -};
1049   -#endif
1050   -
1051   -/* SDHI2 */
1052   -
1053   -/*
1054   - * The card detect pin of the top SD/MMC slot (CN23) is active low and is
1055   - * connected to GPIO SCIFB_SCK of SH7372 (GPIO 162).
1056   - */
1057   -static struct sh_mobile_sdhi_info sdhi2_info = {
1058   - .dma_slave_tx = SHDMA_SLAVE_SDHI2_TX,
1059   - .dma_slave_rx = SHDMA_SLAVE_SDHI2_RX,
1060   - .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_USE_GPIO_CD,
1061   - .tmio_caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_SDIO_IRQ |
1062   - MMC_CAP_NEEDS_POLL,
1063   - .cd_gpio = 162,
1064   -};
1065   -
1066   -static struct resource sdhi2_resources[] = {
1067   - {
1068   - .name = "SDHI2",
1069   - .start = 0xe6870000,
1070   - .end = 0xe68700ff,
1071   - .flags = IORESOURCE_MEM,
1072   - }, {
1073   - .name = SH_MOBILE_SDHI_IRQ_SDCARD,
1074   - .start = evt2irq(0x1220), /* SDHI2_SDHI2I1 */
1075   - .flags = IORESOURCE_IRQ,
1076   - }, {
1077   - .name = SH_MOBILE_SDHI_IRQ_SDIO,
1078   - .start = evt2irq(0x1240), /* SDHI2_SDHI2I2 */
1079   - .flags = IORESOURCE_IRQ,
1080   - },
1081   -};
1082   -
1083   -static struct platform_device sdhi2_device = {
1084   - .name = "sh_mobile_sdhi",
1085   - .num_resources = ARRAY_SIZE(sdhi2_resources),
1086   - .resource = sdhi2_resources,
1087   - .id = 2,
1088   - .dev = {
1089   - .platform_data = &sdhi2_info,
1090   - },
1091   -};
1092   -
1093   -/* SH_MMCIF */
1094   -#if IS_ENABLED(CONFIG_MMC_SH_MMCIF)
1095   -static struct resource sh_mmcif_resources[] = {
1096   - [0] = {
1097   - .name = "MMCIF",
1098   - .start = 0xE6BD0000,
1099   - .end = 0xE6BD00FF,
1100   - .flags = IORESOURCE_MEM,
1101   - },
1102   - [1] = {
1103   - /* MMC ERR */
1104   - .start = evt2irq(0x1ac0),
1105   - .flags = IORESOURCE_IRQ,
1106   - },
1107   - [2] = {
1108   - /* MMC NOR */
1109   - .start = evt2irq(0x1ae0),
1110   - .flags = IORESOURCE_IRQ,
1111   - },
1112   -};
1113   -
1114   -static struct sh_mmcif_plat_data sh_mmcif_plat = {
1115   - .sup_pclk = 0,
1116   - .caps = MMC_CAP_4_BIT_DATA |
1117   - MMC_CAP_8_BIT_DATA |
1118   - MMC_CAP_NEEDS_POLL,
1119   - .use_cd_gpio = true,
1120   - /* card detect pin for SD/MMC slot (CN7) */
1121   - .cd_gpio = 41,
1122   - .slave_id_tx = SHDMA_SLAVE_MMCIF_TX,
1123   - .slave_id_rx = SHDMA_SLAVE_MMCIF_RX,
1124   -};
1125   -
1126   -static struct platform_device sh_mmcif_device = {
1127   - .name = "sh_mmcif",
1128   - .id = 0,
1129   - .dev = {
1130   - .dma_mask = NULL,
1131   - .coherent_dma_mask = 0xffffffff,
1132   - .platform_data = &sh_mmcif_plat,
1133   - },
1134   - .num_resources = ARRAY_SIZE(sh_mmcif_resources),
1135   - .resource = sh_mmcif_resources,
1136   -};
1137   -#endif
1138   -
1139   -static int mackerel_camera_add(struct soc_camera_device *icd);
1140   -static void mackerel_camera_del(struct soc_camera_device *icd);
1141   -
1142   -static int camera_set_capture(struct soc_camera_platform_info *info,
1143   - int enable)
1144   -{
1145   - return 0; /* camera sensor always enabled */
1146   -}
1147   -
1148   -static struct soc_camera_platform_info camera_info = {
1149   - .format_name = "UYVY",
1150   - .format_depth = 16,
1151   - .format = {
1152   - .code = MEDIA_BUS_FMT_UYVY8_2X8,
1153   - .colorspace = V4L2_COLORSPACE_SMPTE170M,
1154   - .field = V4L2_FIELD_NONE,
1155   - .width = 640,
1156   - .height = 480,
1157   - },
1158   - .mbus_param = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER |
1159   - V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH |
1160   - V4L2_MBUS_DATA_ACTIVE_HIGH,
1161   - .mbus_type = V4L2_MBUS_PARALLEL,
1162   - .set_capture = camera_set_capture,
1163   -};
1164   -
1165   -static struct soc_camera_link camera_link = {
1166   - .bus_id = 0,
1167   - .add_device = mackerel_camera_add,
1168   - .del_device = mackerel_camera_del,
1169   - .module_name = "soc_camera_platform",
1170   - .priv = &camera_info,
1171   -};
1172   -
1173   -static struct platform_device *camera_device;
1174   -
1175   -static void mackerel_camera_release(struct device *dev)
1176   -{
1177   - soc_camera_platform_release(&camera_device);
1178   -}
1179   -
1180   -static int mackerel_camera_add(struct soc_camera_device *icd)
1181   -{
1182   - return soc_camera_platform_add(icd, &camera_device, &camera_link,
1183   - mackerel_camera_release, 0);
1184   -}
1185   -
1186   -static void mackerel_camera_del(struct soc_camera_device *icd)
1187   -{
1188   - soc_camera_platform_del(icd, camera_device, &camera_link);
1189   -}
1190   -
1191   -static struct sh_mobile_ceu_info sh_mobile_ceu_info = {
1192   - .flags = SH_CEU_FLAG_USE_8BIT_BUS,
1193   - .max_width = 8188,
1194   - .max_height = 8188,
1195   -};
1196   -
1197   -static struct resource ceu_resources[] = {
1198   - [0] = {
1199   - .name = "CEU",
1200   - .start = 0xfe910000,
1201   - .end = 0xfe91009f,
1202   - .flags = IORESOURCE_MEM,
1203   - },
1204   - [1] = {
1205   - .start = intcs_evt2irq(0x880),
1206   - .flags = IORESOURCE_IRQ,
1207   - },
1208   - [2] = {
1209   - /* place holder for contiguous memory */
1210   - },
1211   -};
1212   -
1213   -static struct platform_device ceu_device = {
1214   - .name = "sh_mobile_ceu",
1215   - .id = 0, /* "ceu0" clock */
1216   - .num_resources = ARRAY_SIZE(ceu_resources),
1217   - .resource = ceu_resources,
1218   - .dev = {
1219   - .platform_data = &sh_mobile_ceu_info,
1220   - .coherent_dma_mask = 0xffffffff,
1221   - },
1222   -};
1223   -
1224   -static struct platform_device mackerel_camera = {
1225   - .name = "soc-camera-pdrv",
1226   - .id = 0,
1227   - .dev = {
1228   - .platform_data = &camera_link,
1229   - },
1230   -};
1231   -
1232   -static struct platform_device *mackerel_devices[] __initdata = {
1233   - &nor_flash_device,
1234   - &smc911x_device,
1235   - &lcdc_device,
1236   - &gpio_backlight_device,
1237   - &usbhs0_device,
1238   - &usbhs1_device,
1239   - &leds_device,
1240   - &fsi_device,
1241   - &fsi_ak4643_device,
1242   - &fsi_hdmi_device,
1243   - &nand_flash_device,
1244   - &sdhi0_device,
1245   -#if !IS_ENABLED(CONFIG_MMC_SH_MMCIF)
1246   - &sdhi1_device,
1247   -#else
1248   - &sh_mmcif_device,
1249   -#endif
1250   - &sdhi2_device,
1251   - &ceu_device,
1252   - &mackerel_camera,
1253   - &hdmi_device,
1254   - &hdmi_lcdc_device,
1255   - &meram_device,
1256   -};
1257   -
1258   -/* Keypad Initialization */
1259   -#define KEYPAD_BUTTON(ev_type, ev_code, act_low) \
1260   -{ \
1261   - .type = ev_type, \
1262   - .code = ev_code, \
1263   - .active_low = act_low, \
1264   -}
1265   -
1266   -#define KEYPAD_BUTTON_LOW(event_code) KEYPAD_BUTTON(EV_KEY, event_code, 1)
1267   -
1268   -static struct tca6416_button mackerel_gpio_keys[] = {
1269   - KEYPAD_BUTTON_LOW(KEY_HOME),
1270   - KEYPAD_BUTTON_LOW(KEY_MENU),
1271   - KEYPAD_BUTTON_LOW(KEY_BACK),
1272   - KEYPAD_BUTTON_LOW(KEY_POWER),
1273   -};
1274   -
1275   -static struct tca6416_keys_platform_data mackerel_tca6416_keys_info = {
1276   - .buttons = mackerel_gpio_keys,
1277   - .nbuttons = ARRAY_SIZE(mackerel_gpio_keys),
1278   - .rep = 1,
1279   - .use_polling = 0,
1280   - .pinmask = 0x000F,
1281   -};
1282   -
1283   -/* I2C */
1284   -#define IRQ7 evt2irq(0x02e0)
1285   -#define IRQ9 evt2irq(0x0320)
1286   -
1287   -static struct i2c_board_info i2c0_devices[] = {
1288   - {
1289   - I2C_BOARD_INFO("ak4643", 0x13),
1290   - },
1291   - /* Keypad */
1292   - {
1293   - I2C_BOARD_INFO("tca6408-keys", 0x20),
1294   - .platform_data = &mackerel_tca6416_keys_info,
1295   - .irq = IRQ9,
1296   - },
1297   - /* Touchscreen */
1298   - {
1299   - I2C_BOARD_INFO("st1232-ts", 0x55),
1300   - .irq = IRQ7,
1301   - },
1302   -};
1303   -
1304   -#define IRQ21 evt2irq(0x32a0)
1305   -
1306   -static struct i2c_board_info i2c1_devices[] = {
1307   - /* Accelerometer */
1308   - {
1309   - I2C_BOARD_INFO("adxl34x", 0x53),
1310   - .irq = IRQ21,
1311   - },
1312   -};
1313   -
1314   -static unsigned long pin_pulldown_conf[] = {
1315   - PIN_CONF_PACKED(PIN_CONFIG_BIAS_PULL_DOWN, 0),
1316   -};
1317   -
1318   -static const struct pinctrl_map mackerel_pinctrl_map[] = {
1319   - /* ADXL34X */
1320   - PIN_MAP_MUX_GROUP_DEFAULT("1-0053", "pfc-sh7372",
1321   - "intc_irq21", "intc"),
1322   - /* CEU */
1323   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
1324   - "ceu_data_0_7", "ceu"),
1325   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
1326   - "ceu_clk_0", "ceu"),
1327   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
1328   - "ceu_sync", "ceu"),
1329   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_ceu.0", "pfc-sh7372",
1330   - "ceu_field", "ceu"),
1331   - /* FLCTL */
1332   - PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
1333   - "flctl_data", "flctl"),
1334   - PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
1335   - "flctl_ce0", "flctl"),
1336   - PIN_MAP_MUX_GROUP_DEFAULT("sh_flctl.0", "pfc-sh7372",
1337   - "flctl_ctrl", "flctl"),
1338   - /* FSIA (AK4643) */
1339   - PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
1340   - "fsia_sclk_in", "fsia"),
1341   - PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
1342   - "fsia_data_in", "fsia"),
1343   - PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.0", "pfc-sh7372",
1344   - "fsia_data_out", "fsia"),
1345   - /* FSIB (HDMI) */
1346   - PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-sh7372",
1347   - "fsib_mclk_in", "fsib"),
1348   - /* HDMI */
1349   - PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-sh7372",
1350   - "hdmi", "hdmi"),
1351   - /* LCDC */
1352   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
1353   - "lcd_data24", "lcd"),
1354   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_lcdc_fb.0", "pfc-sh7372",
1355   - "lcd_sync", "lcd"),
1356   - /* SCIFA0 */
1357   - PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.0", "pfc-sh7372",
1358   - "scifa0_data", "scifa0"),
1359   - /* SCIFA2 (GT-720F GPS module) */
1360   - PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.2", "pfc-sh7372",
1361   - "scifa2_data", "scifa2"),
1362   - /* SDHI0 */
1363   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
1364   - "sdhi0_data4", "sdhi0"),
1365   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
1366   - "sdhi0_ctrl", "sdhi0"),
1367   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
1368   - "sdhi0_wp", "sdhi0"),
1369   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-sh7372",
1370   - "intc_irq26_1", "intc"),
1371   - /* SDHI1 */
1372   -#if !IS_ENABLED(CONFIG_MMC_SH_MMCIF)
1373   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
1374   - "sdhi1_data4", "sdhi1"),
1375   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.1", "pfc-sh7372",
1376   - "sdhi1_ctrl", "sdhi1"),
1377   -#else
1378   - /* MMCIF */
1379   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372",
1380   - "mmc0_data8_0", "mmc0"),
1381   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mmcif.0", "pfc-sh7372",
1382   - "mmc0_ctrl_0", "mmc0"),
1383   -#endif
1384   - /* SDHI2 */
1385   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh7372",
1386   - "sdhi2_data4", "sdhi2"),
1387   - PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.2", "pfc-sh7372",
1388   - "sdhi2_ctrl", "sdhi2"),
1389   - /* SMSC911X */
1390   - PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
1391   - "bsc_cs5a", "bsc"),
1392   - PIN_MAP_MUX_GROUP_DEFAULT("smsc911x", "pfc-sh7372",
1393   - "intc_irq6_0", "intc"),
1394   - /* ST1232 */
1395   - PIN_MAP_MUX_GROUP_DEFAULT("0-0055", "pfc-sh7372",
1396   - "intc_irq7_0", "intc"),
1397   - /* TCA6416 */
1398   - PIN_MAP_MUX_GROUP_DEFAULT("0-0020", "pfc-sh7372",
1399   - "intc_irq9_0", "intc"),
1400   - /* USBHS0 */
1401   - PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.0", "pfc-sh7372",
1402   - "usb0_vbus", "usb0"),
1403   - PIN_MAP_CONFIGS_GROUP_DEFAULT("renesas_usbhs.0", "pfc-sh7372",
1404   - "usb0_vbus", pin_pulldown_conf),
1405   - /* USBHS1 */
1406   - PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
1407   - "usb1_vbus", "usb1"),
1408   - PIN_MAP_CONFIGS_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
1409   - "usb1_vbus", pin_pulldown_conf),
1410   - PIN_MAP_MUX_GROUP_DEFAULT("renesas_usbhs.1", "pfc-sh7372",
1411   - "usb1_otg_id_0", "usb1"),
1412   -};
1413   -
1414   -#define GPIO_PORT9CR IOMEM(0xE6051009)
1415   -#define GPIO_PORT10CR IOMEM(0xE605100A)
1416   -#define SRCR4 IOMEM(0xe61580bc)
1417   -#define USCCR1 IOMEM(0xE6058144)
1418   -static void __init mackerel_init(void)
1419   -{
1420   - static struct pm_domain_device domain_devices[] __initdata = {
1421   - { "A4LC", &lcdc_device, },
1422   - { "A4LC", &hdmi_lcdc_device, },
1423   - { "A4LC", &meram_device, },
1424   - { "A4MP", &fsi_device, },
1425   - { "A3SP", &usbhs0_device, },
1426   - { "A3SP", &usbhs1_device, },
1427   - { "A3SP", &nand_flash_device, },
1428   - { "A3SP", &sdhi0_device, },
1429   -#if !IS_ENABLED(CONFIG_MMC_SH_MMCIF)
1430   - { "A3SP", &sdhi1_device, },
1431   -#else
1432   - { "A3SP", &sh_mmcif_device, },
1433   -#endif
1434   - { "A3SP", &sdhi2_device, },
1435   - { "A4R", &ceu_device, },
1436   - };
1437   - u32 srcr4;
1438   - struct clk *clk;
1439   -
1440   - regulator_register_always_on(0, "fixed-1.8V", fixed1v8_power_consumers,
1441   - ARRAY_SIZE(fixed1v8_power_consumers), 1800000);
1442   - regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers,
1443   - ARRAY_SIZE(fixed3v3_power_consumers), 3300000);
1444   - regulator_register_fixed(2, dummy_supplies, ARRAY_SIZE(dummy_supplies));
1445   -
1446   - /* External clock source */
1447   - clk_set_rate(&sh7372_dv_clki_clk, 27000000);
1448   -
1449   - pinctrl_register_mappings(mackerel_pinctrl_map,
1450   - ARRAY_SIZE(mackerel_pinctrl_map));
1451   - sh7372_pinmux_init();
1452   -
1453   - gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
1454   -
1455   - /* FSI2 port A (ak4643) */
1456   - gpio_request_one(161, GPIOF_OUT_INIT_LOW, NULL); /* slave */
1457   -
1458   - gpio_request(9, NULL);
1459   - gpio_request(10, NULL);
1460   - gpio_direction_none(GPIO_PORT9CR); /* FSIAOBT needs no direction */
1461   - gpio_direction_none(GPIO_PORT10CR); /* FSIAOLR needs no direction */
1462   -
1463   - intc_set_priority(IRQ_FSI, 3); /* irq priority FSI(3) > SMSC911X(2) */
1464   -
1465   - /* FSI2 port B (HDMI) */
1466   - __raw_writew(__raw_readw(USCCR1) & ~(1 << 6), USCCR1); /* use SPDIF */
1467   -
1468   - /* set SPU2 clock to 119.6 MHz */
1469   - clk = clk_get(NULL, "spu_clk");
1470   - if (!IS_ERR(clk)) {
1471   - clk_set_rate(clk, clk_round_rate(clk, 119600000));
1472   - clk_put(clk);
1473   - }
1474   -
1475   - /* Keypad */
1476   - irq_set_irq_type(IRQ9, IRQ_TYPE_LEVEL_HIGH);
1477   -
1478   - /* Touchscreen */
1479   - irq_set_irq_type(IRQ7, IRQ_TYPE_LEVEL_LOW);
1480   -
1481   - /* Accelerometer */
1482   - irq_set_irq_type(IRQ21, IRQ_TYPE_LEVEL_HIGH);
1483   -
1484   - /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */
1485   - srcr4 = __raw_readl(SRCR4);
1486   - __raw_writel(srcr4 | (1 << 13), SRCR4);
1487   - udelay(50);
1488   - __raw_writel(srcr4 & ~(1 << 13), SRCR4);
1489   -
1490   - i2c_register_board_info(0, i2c0_devices,
1491   - ARRAY_SIZE(i2c0_devices));
1492   - i2c_register_board_info(1, i2c1_devices,
1493   - ARRAY_SIZE(i2c1_devices));
1494   -
1495   - sh7372_add_standard_devices();
1496   -
1497   - platform_add_devices(mackerel_devices, ARRAY_SIZE(mackerel_devices));
1498   -
1499   - rmobile_add_devices_to_domains(domain_devices,
1500   - ARRAY_SIZE(domain_devices));
1501   -
1502   - hdmi_init_pm_clock();
1503   - sh7372_pm_init();
1504   - pm_clk_add(&fsi_device.dev, "spu2");
1505   - pm_clk_add(&hdmi_lcdc_device.dev, "hdmi");
1506   -}
1507   -
1508   -static const char *mackerel_boards_compat_dt[] __initdata = {
1509   - "renesas,mackerel",
1510   - NULL,
1511   -};
1512   -
1513   -DT_MACHINE_START(MACKEREL_DT, "mackerel")
1514   - .map_io = sh7372_map_io,
1515   - .init_early = sh7372_add_early_devices,
1516   - .init_irq = sh7372_init_irq,
1517   - .handle_irq = shmobile_handle_irq_intc,
1518   - .init_machine = mackerel_init,
1519   - .init_late = sh7372_pm_init_late,
1520   - .init_time = sh7372_earlytimer_init,
1521   - .dt_compat = mackerel_boards_compat_dt,
1522   -MACHINE_END