aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pnp/driver.c
AgeCommit message (Expand)Author
2017-11-02License cleanup: add SPDX GPL-2.0 license identifier to files with no licenseGreg Kroah-Hartman
2016-01-04PNP: respect PNP_DRIVER_RES_DO_NOT_CHANGE when detachingHeiner Kallweit
2015-03-18PNP: Convert pnp_lock into a mutexRafael J. Wysocki
2015-02-02PNP: Allow console to override ACPI device sleepPeter Hurley
2013-12-05PNP: fix restoring devices after hibernationDmitry Torokhov
2013-10-16PNP: convert bus code to use dev_groupsGreg Kroah-Hartman
2013-09-11pnp: change pnp bus pm_ops to invoke pnp driver dev_pm_ops if specifiedShuah Khan
2013-07-27PNP: convert PNP driver bus legacy pm_ops to dev_pm_opsShuah Khan
2011-01-11PNP / ACPI: Use DEVICE_ACPI_HANDLE() for device ACPI handle accessRafael J. Wysocki
2010-10-01ACPI/PNP: A HID value of an object never changes -> make it constThomas Renninger
2009-09-22pnp: add a shutdown method to pnp driversDavid Härdeman
2008-10-23Merge branch 'linus' into testLen Brown
2008-10-16PNP: create device attributes via default device attributesDrew Moseley
2008-10-10PNP: convert the last few pnp_info() uses to printk()Bjorn Helgaas
2008-04-29PNP: change pnp_add_id() to allocate its own pnp_id structuresBjorn Helgaas
2008-04-28PNP: skip dev->protocol NULL checksBjorn Helgaas
2008-02-06PNP: do not test PNP_DRIVER_RES_DO_NOT_CHANGE on suspend/resumeRene Herman
2007-10-17PNP: use dev_info(), dev_err(), etc in coreBjorn Helgaas
2007-08-24PNP: remove null pointer checksBjorn Helgaas
2007-08-24PNP: fix up after LindentBjorn Helgaas
2007-07-26PNP: fix up after LindentBjorn Helgaas
2007-07-26PNP: Lindent all source filesBjorn Helgaas
2007-07-22ACPI, PNP: hook ACPI D-state to PNP suspend/resumeShaohua Li
2006-06-30Remove obsolete #include <linux/config.h>Jörn Engel
2006-03-27[PATCH] pnp: PNP: adjust pnp_register_driver signatureBjorn Helgaas
2006-01-13[PATCH] Add pnp_bus_type probe and remove methodsRussell King
2006-01-03[ALSA] [PATCH] alsa: Improved PnP suspend supportPierre Ossman
2006-01-03[ALSA] PATCH] Add PM support to PnP driversTakashi Iwai
2005-11-07[PATCH] drivers/pnp/: cleanupsAdrian Bunk
2005-09-07[PATCH] PNP: make pnp_dbg conditional directly on CONFIG_PNP_DEBUGBjorn Helgaas
2005-06-20[PATCH] Use driver_for_each_device() in drivers/pnp/driver.c instead of manua...mochel@digitalimplant.org
2005-04-16Linux-2.6.12-rc2v2.6.12-rc2Linus Torvalds
="n">i = 0; i < 3; i++) offset[i] = abs(rate - (*prate * (1 << i))); for (i = 0; i < 3; i++) if (m < 0) m = i; else m = (offset[i] < offset[m])?i:m; return *prate * (1 << m); } static int pll_set_rate(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate) { int pll; unsigned char val; unsigned long flags; struct pll_clock *pll_clock = to_pll_clock(hw); pll = ((rate / parent_rate) / 2) & 0x03; spin_lock_irqsave(&clklock, flags); val = readb(pll_clock->sckcr); val |= 0x08; writeb(val, pll_clock->sckcr); val = readb(pll_clock->pllcr); val &= ~0x03; val |= pll; writeb(val, pll_clock->pllcr); spin_unlock_irqrestore(&clklock, flags); return 0; } static const struct clk_ops pll_ops = { .recalc_rate = pll_recalc_rate, .round_rate = pll_round_rate, .set_rate = pll_set_rate, }; static void __init h8s2678_pll_clk_setup(struct device_node *node) { unsigned int num_parents; const char *clk_name = node->name; const char *parent_name; struct pll_clock *pll_clock; struct clk_init_data init; int ret; num_parents = of_clk_get_parent_count(node); if (!num_parents) { pr_err("%s: no parent found", clk_name); return; } pll_clock = kzalloc(sizeof(*pll_clock), GFP_KERNEL); if (!pll_clock) return; pll_clock->sckcr = of_iomap(node, 0); if (pll_clock->sckcr == NULL) { pr_err("%s: failed to map divide register", clk_name); goto free_clock; } pll_clock->pllcr = of_iomap(node, 1); if (pll_clock->pllcr == NULL) { pr_err("%s: failed to map multiply register", clk_name); goto unmap_sckcr; } parent_name = of_clk_get_parent_name(node, 0); init.name = clk_name; init.ops = &pll_ops; init.flags = CLK_IS_BASIC; init.parent_names = &parent_name; init.num_parents = 1; pll_clock->hw.init = &init; ret = clk_hw_register(NULL, &pll_clock->hw); if (ret) { pr_err("%s: failed to register %s div clock (%d)\n", __func__, clk_name, ret); goto unmap_pllcr; } of_clk_add_hw_provider(node, of_clk_hw_simple_get, &pll_clock->hw); return; unmap_pllcr: iounmap(pll_clock->pllcr); unmap_sckcr: iounmap(pll_clock->sckcr); free_clock: kfree(pll_clock); } CLK_OF_DECLARE(h8s2678_div_clk, "renesas,h8s2678-pll-clock", h8s2678_pll_clk_setup);