cregit-Linux how code gets into the kernel

Release 4.11 drivers/mtd/onenand/generic.c

/*
 *  linux/drivers/mtd/onenand/generic.c
 *
 *  Copyright (c) 2005 Samsung Electronics
 *  Kyungmin Park <kyungmin.park@samsung.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *  Overview:
 *   This is a device driver for the OneNAND flash for generic boards.
 */

#include <linux/module.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
#include <linux/mtd/partitions.h>
#include <linux/io.h>

/*
 * Note: Driver name and platform data format have been updated!
 *
 * This version of the driver is named "onenand-flash" and takes struct
 * onenand_platform_data as platform data. The old ARM-specific version
 * with the name "onenand" used to take struct flash_platform_data.
 */

#define DRIVER_NAME	"onenand-flash"


struct onenand_info {
	
struct mtd_info		mtd;
	
struct onenand_chip	onenand;
};


static int generic_onenand_probe(struct platform_device *pdev) { struct onenand_info *info; struct onenand_platform_data *pdata = dev_get_platdata(&pdev->dev); struct resource *res = pdev->resource; unsigned long size = resource_size(res); int err; info = kzalloc(sizeof(struct onenand_info), GFP_KERNEL); if (!info) return -ENOMEM; if (!request_mem_region(res->start, size, dev_name(&pdev->dev))) { err = -EBUSY; goto out_free_info; } info->onenand.base = ioremap(res->start, size); if (!info->onenand.base) { err = -ENOMEM; goto out_release_mem_region; } info->onenand.mmcontrol = pdata ? pdata->mmcontrol : NULL; info->onenand.irq = platform_get_irq(pdev, 0); info->mtd.dev.parent = &pdev->dev; info->mtd.priv = &info->onenand; if (onenand_scan(&info->mtd, 1)) { err = -ENXIO; goto out_iounmap; } err = mtd_device_parse_register(&info->mtd, NULL, NULL, pdata ? pdata->parts : NULL, pdata ? pdata->nr_parts : 0); platform_set_drvdata(pdev, info); return 0; out_iounmap: iounmap(info->onenand.base); out_release_mem_region: release_mem_region(res->start, size); out_free_info: kfree(info); return err; }

Contributors

PersonTokensPropCommitsCommitProp
Kyungmin Park24587.19%215.38%
Magnus Damm124.27%17.69%
Dmitry Baryshkov72.49%215.38%
Lei Ming51.78%17.69%
Jingoo Han41.42%17.69%
Frans Klaver31.07%17.69%
Brian Norris10.36%17.69%
Jamie Iles10.36%17.69%
Burman Yan10.36%17.69%
Kay Sievers10.36%17.69%
Artem B. Bityutskiy10.36%17.69%
Total281100.00%13100.00%


static int generic_onenand_remove(struct platform_device *pdev) { struct onenand_info *info = platform_get_drvdata(pdev); struct resource *res = pdev->resource; unsigned long size = resource_size(res); if (info) { onenand_release(&info->mtd); release_mem_region(res->start, size); iounmap(info->onenand.base); kfree(info); } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Kyungmin Park7392.41%133.33%
Magnus Damm33.80%133.33%
Lei Ming33.80%133.33%
Total79100.00%3100.00%

static struct platform_driver generic_onenand_driver = { .driver = { .name = DRIVER_NAME, }, .probe = generic_onenand_probe, .remove = generic_onenand_remove, }; module_platform_driver(generic_onenand_driver); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Kyungmin Park <kyungmin.park@samsung.com>"); MODULE_DESCRIPTION("Glue layer for OneNAND flash on generic boards"); MODULE_ALIAS("platform:" DRIVER_NAME);

Overall Contributors

PersonTokensPropCommitsCommitProp
Kyungmin Park39286.53%317.65%
Magnus Damm173.75%15.88%
Lei Ming143.09%15.88%
Axel Lin71.55%15.88%
Dmitry Baryshkov71.55%211.76%
Jingoo Han40.88%15.88%
Tim Schmielau30.66%15.88%
Frans Klaver30.66%15.88%
Burman Yan10.22%15.88%
Jamie Iles10.22%15.88%
Kay Sievers10.22%15.88%
Artem B. Bityutskiy10.22%15.88%
Dan J Williams10.22%15.88%
Brian Norris10.22%15.88%
Total453100.00%17100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.