Lines Matching +full:ipmi +full:- +full:bt

1 // SPDX-License-Identifier: GPL-2.0+
5 * Handling for platform devices in IPMI (ACPI, OF, and things
57 /* For GPE-type interrupts. */
63 ipmi_si_irq_handler(io->irq, io->irq_handler_data); in ipmi_acpi_gpe()
69 if (!io->irq) in acpi_gpe_irq_cleanup()
73 acpi_remove_gpe_handler(NULL, io->irq, &ipmi_acpi_gpe); in acpi_gpe_irq_cleanup()
80 if (!io->irq) in acpi_gpe_irq_setup()
84 io->irq, in acpi_gpe_irq_setup()
89 dev_warn(io->dev, in acpi_gpe_irq_setup()
91 io->irq); in acpi_gpe_irq_setup()
92 io->irq = 0; in acpi_gpe_irq_setup()
93 return -EINVAL; in acpi_gpe_irq_setup()
95 io->irq_cleanup = acpi_gpe_irq_cleanup; in acpi_gpe_irq_setup()
97 dev_info(io->dev, "Using ACPI GPE %d\n", io->irq); in acpi_gpe_irq_setup()
111 io->addr_space = IPMI_IO_ADDR_SPACE; in ipmi_get_info_from_resources()
115 io->addr_space = IPMI_MEM_ADDR_SPACE; in ipmi_get_info_from_resources()
118 dev_err(&pdev->dev, "no I/O or memory address\n"); in ipmi_get_info_from_resources()
121 io->addr_data = res->start; in ipmi_get_info_from_resources()
123 io->regspacing = DEFAULT_REGSPACING; in ipmi_get_info_from_resources()
125 (io->addr_space == IPMI_IO_ADDR_SPACE) ? in ipmi_get_info_from_resources()
129 if (res_second->start > io->addr_data) in ipmi_get_info_from_resources()
130 io->regspacing = res_second->start - io->addr_data; in ipmi_get_info_from_resources()
142 rv = device_property_read_u8(&pdev->dev, "addr-source", &addr_source); in platform_ipmi_probe()
146 return -EINVAL; in platform_ipmi_probe()
150 return -ENODEV; in platform_ipmi_probe()
153 return -ENODEV; in platform_ipmi_probe()
156 rv = device_property_read_u8(&pdev->dev, "ipmi-type", &type); in platform_ipmi_probe()
158 return -ENODEV; in platform_ipmi_probe()
162 dev_info(&pdev->dev, "probing via %s\n", in platform_ipmi_probe()
172 return -ENODEV; in platform_ipmi_probe()
174 dev_err(&pdev->dev, "ipmi-type property is invalid\n"); in platform_ipmi_probe()
175 return -EINVAL; in platform_ipmi_probe()
179 rv = device_property_read_u8(&pdev->dev, "reg-size", &regsize); in platform_ipmi_probe()
184 rv = device_property_read_u8(&pdev->dev, "reg-shift", &regshift); in platform_ipmi_probe()
189 return -EINVAL; in platform_ipmi_probe()
191 rv = device_property_read_u8(&pdev->dev, "slave-addr", &slave_addr); in platform_ipmi_probe()
203 io.dev = &pdev->dev; in platform_ipmi_probe()
217 { .type = "ipmi", .compatible = "ipmi-kcs",
219 { .type = "ipmi", .compatible = "ipmi-smic",
221 { .type = "ipmi", .compatible = "ipmi-bt",
233 struct device_node *np = pdev->dev.of_node; in of_ipmi_probe()
238 return -ENODEV; in of_ipmi_probe()
240 dev_info(&pdev->dev, "probing via device tree\n"); in of_ipmi_probe()
242 match = of_match_device(of_ipmi_match, &pdev->dev); in of_ipmi_probe()
244 return -ENODEV; in of_ipmi_probe()
247 return -EINVAL; in of_ipmi_probe()
251 dev_warn(&pdev->dev, "invalid address from OF\n"); in of_ipmi_probe()
255 regsize = of_get_property(np, "reg-size", &proplen); in of_ipmi_probe()
257 dev_warn(&pdev->dev, "invalid regsize from OF\n"); in of_ipmi_probe()
258 return -EINVAL; in of_ipmi_probe()
261 regspacing = of_get_property(np, "reg-spacing", &proplen); in of_ipmi_probe()
263 dev_warn(&pdev->dev, "invalid regspacing from OF\n"); in of_ipmi_probe()
264 return -EINVAL; in of_ipmi_probe()
267 regshift = of_get_property(np, "reg-shift", &proplen); in of_ipmi_probe()
269 dev_warn(&pdev->dev, "invalid regshift from OF\n"); in of_ipmi_probe()
270 return -EINVAL; in of_ipmi_probe()
274 io.si_type = (enum si_type) match->data; in of_ipmi_probe()
289 io.irq = irq_of_parse_and_map(pdev->dev.of_node, 0); in of_ipmi_probe()
290 io.dev = &pdev->dev; in of_ipmi_probe()
292 dev_dbg(&pdev->dev, "addr 0x%lx regsize %d spacing %d irq %d\n", in of_ipmi_probe()
301 return -ENODEV; in of_ipmi_probe()
310 slave_addr = ipmi_dmi_get_slave_addr(io->si_type, in find_slave_address()
311 io->addr_space, in find_slave_address()
312 io->addr_data); in find_slave_address()
325 int rv = -EINVAL; in acpi_ipmi_probe()
328 return -ENODEV; in acpi_ipmi_probe()
330 handle = ACPI_HANDLE(&pdev->dev); in acpi_ipmi_probe()
332 return -ENODEV; in acpi_ipmi_probe()
336 dev_info(&pdev->dev, "probing via ACPI\n"); in acpi_ipmi_probe()
340 /* _IFT tells us the interface type: KCS, BT, etc */ in acpi_ipmi_probe()
343 dev_err(&pdev->dev, in acpi_ipmi_probe()
344 "Could not find ACPI IPMI interface type\n"); in acpi_ipmi_probe()
359 rv = -ENODEV; in acpi_ipmi_probe()
362 dev_info(&pdev->dev, "unknown IPMI type %lld\n", tmp); in acpi_ipmi_probe()
371 rv = -EINVAL; in acpi_ipmi_probe()
391 io.dev = &pdev->dev; in acpi_ipmi_probe()
412 return -ENODEV; in acpi_ipmi_probe()
418 if (pdev->dev.of_node && of_ipmi_probe(pdev) == 0) in ipmi_probe()
429 return ipmi_si_remove_by_dev(&pdev->dev); in ipmi_remove()
437 return strcmp(pdev->name, name) == 0; in pdev_match_name()
454 { "dmi-ipmi-si", 0 },
455 { "hardcode-ipmi-si", 0 },
456 { "hotmod-ipmi-si", 0 },