Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/boards/mach-landisk/setup.c
26490 views
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
* arch/sh/boards/landisk/setup.c
4
*
5
* I-O DATA Device, Inc. LANDISK Support.
6
*
7
* Copyright (C) 2000 Kazumoto Kojima
8
* Copyright (C) 2002 Paul Mundt
9
* Copylight (C) 2002 Atom Create Engineering Co., Ltd.
10
* Copyright (C) 2005-2007 kogiidena
11
*/
12
#include <linux/init.h>
13
#include <linux/platform_device.h>
14
#include <linux/ata_platform.h>
15
#include <linux/pm.h>
16
#include <linux/mm.h>
17
#include <asm/machvec.h>
18
#include <mach-landisk/mach/iodata_landisk.h>
19
#include <asm/io.h>
20
21
static void landisk_power_off(void)
22
{
23
__raw_writeb(0x01, PA_SHUTDOWN);
24
}
25
26
static struct resource cf_ide_resources[3];
27
28
static struct pata_platform_info pata_info = {
29
.ioport_shift = 1,
30
};
31
32
static struct platform_device cf_ide_device = {
33
.name = "pata_platform",
34
.id = -1,
35
.num_resources = ARRAY_SIZE(cf_ide_resources),
36
.resource = cf_ide_resources,
37
.dev = {
38
.platform_data = &pata_info,
39
},
40
};
41
42
static struct platform_device rtc_device = {
43
.name = "rs5c313",
44
.id = -1,
45
};
46
47
static struct platform_device *landisk_devices[] __initdata = {
48
&cf_ide_device,
49
&rtc_device,
50
};
51
52
static int __init landisk_devices_setup(void)
53
{
54
pgprot_t prot;
55
unsigned long paddrbase;
56
void *cf_ide_base;
57
58
/* open I/O area window */
59
paddrbase = virt_to_phys((void *)PA_AREA5_IO);
60
prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16);
61
cf_ide_base = ioremap_prot(paddrbase, PAGE_SIZE, prot);
62
if (!cf_ide_base) {
63
printk("allocate_cf_area : can't open CF I/O window!\n");
64
return -ENOMEM;
65
}
66
67
/* IDE cmd address : 0x1f0-0x1f7 and 0x3f6 */
68
cf_ide_resources[0].start = (unsigned long)cf_ide_base + 0x40;
69
cf_ide_resources[0].end = (unsigned long)cf_ide_base + 0x40 + 0x0f;
70
cf_ide_resources[0].flags = IORESOURCE_IO;
71
cf_ide_resources[1].start = (unsigned long)cf_ide_base + 0x2c;
72
cf_ide_resources[1].end = (unsigned long)cf_ide_base + 0x2c + 0x03;
73
cf_ide_resources[1].flags = IORESOURCE_IO;
74
cf_ide_resources[2].start = IRQ_FATA;
75
cf_ide_resources[2].flags = IORESOURCE_IRQ;
76
77
return platform_add_devices(landisk_devices,
78
ARRAY_SIZE(landisk_devices));
79
}
80
81
device_initcall(landisk_devices_setup);
82
83
static void __init landisk_setup(char **cmdline_p)
84
{
85
/* I/O port identity mapping */
86
__set_io_port_base(0);
87
88
/* LED ON */
89
__raw_writeb(__raw_readb(PA_LED) | 0x03, PA_LED);
90
91
printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n");
92
pm_power_off = landisk_power_off;
93
}
94
95
/*
96
* The Machine Vector
97
*/
98
static struct sh_machine_vector mv_landisk __initmv = {
99
.mv_name = "LANDISK",
100
.mv_setup = landisk_setup,
101
.mv_init_irq = init_landisk_IRQ,
102
};
103
104