cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tps65912-spi.c (2211B)


      1/*
      2 * SPI access driver for TI TPS65912x PMICs
      3 *
      4 * Copyright (C) 2015 Texas Instruments Incorporated - https://www.ti.com/
      5 *	Andrew F. Davis <afd@ti.com>
      6 *
      7 * This program is free software; you can redistribute it and/or
      8 * modify it under the terms of the GNU General Public License version 2 as
      9 * published by the Free Software Foundation.
     10 *
     11 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
     12 * kind, whether expressed or implied; without even the implied warranty
     13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 * GNU General Public License version 2 for more details.
     15 *
     16 * Based on the TPS65218 driver and the previous TPS65912 driver by
     17 * Margarita Olaya Cabrera <magi@slimlogic.co.uk>
     18 */
     19
     20#include <linux/module.h>
     21#include <linux/regmap.h>
     22#include <linux/spi/spi.h>
     23
     24#include <linux/mfd/tps65912.h>
     25
     26static const struct of_device_id tps65912_spi_of_match_table[] = {
     27	{ .compatible = "ti,tps65912", },
     28	{ /* sentinel */ }
     29};
     30MODULE_DEVICE_TABLE(of, tps65912_spi_of_match_table);
     31
     32static int tps65912_spi_probe(struct spi_device *spi)
     33{
     34	struct tps65912 *tps;
     35
     36	tps = devm_kzalloc(&spi->dev, sizeof(*tps), GFP_KERNEL);
     37	if (!tps)
     38		return -ENOMEM;
     39
     40	spi_set_drvdata(spi, tps);
     41	tps->dev = &spi->dev;
     42	tps->irq = spi->irq;
     43
     44	tps->regmap = devm_regmap_init_spi(spi, &tps65912_regmap_config);
     45	if (IS_ERR(tps->regmap)) {
     46		dev_err(tps->dev, "Failed to initialize register map\n");
     47		return PTR_ERR(tps->regmap);
     48	}
     49
     50	return tps65912_device_init(tps);
     51}
     52
     53static void tps65912_spi_remove(struct spi_device *spi)
     54{
     55	struct tps65912 *tps = spi_get_drvdata(spi);
     56
     57	tps65912_device_exit(tps);
     58}
     59
     60static const struct spi_device_id tps65912_spi_id_table[] = {
     61	{ "tps65912", 0 },
     62	{ /* sentinel */ }
     63};
     64MODULE_DEVICE_TABLE(spi, tps65912_spi_id_table);
     65
     66static struct spi_driver tps65912_spi_driver = {
     67	.driver		= {
     68		.name	= "tps65912",
     69		.of_match_table = tps65912_spi_of_match_table,
     70	},
     71	.probe		= tps65912_spi_probe,
     72	.remove		= tps65912_spi_remove,
     73	.id_table       = tps65912_spi_id_table,
     74};
     75module_spi_driver(tps65912_spi_driver);
     76
     77MODULE_AUTHOR("Andrew F. Davis <afd@ti.com>");
     78MODULE_DESCRIPTION("TPS65912x SPI Interface Driver");
     79MODULE_LICENSE("GPL v2");