Exemplo n.º 1
0
static int physmap_flash_remove(struct platform_device *dev)
{
	struct physmap_flash_info *info;
	struct physmap_flash_data *physmap_data;
	int i;

	info = platform_get_drvdata(dev);
	if (info == NULL)
		return 0;
	platform_set_drvdata(dev, NULL);

	physmap_data = dev->dev.platform_data;

	if (info->cmtd) {
		mtd_device_unregister(info->cmtd);
		if (info->nr_parts)
			kfree(info->parts);
		if (info->cmtd != info->mtd[0])
			mtd_concat_destroy(info->cmtd);
	}

	for (i = 0; i < MAX_RESOURCES; i++) {
		if (info->mtd[i] != NULL)
			map_destroy(info->mtd[i]);
	}

	if (physmap_data->exit)
		physmap_data->exit(dev);

	return 0;
}
Exemplo n.º 2
0
static int of_flash_remove(struct platform_device *dev)
{
	struct of_flash *info;
	int i;

	info = dev_get_drvdata(&dev->dev);
	if (!info)
		return 0;
	dev_set_drvdata(&dev->dev, NULL);

	if (info->cmtd) {
		mtd_device_unregister(info->cmtd);
		if (info->cmtd != info->list[0].mtd)
			mtd_concat_destroy(info->cmtd);
	}

	for (i = 0; i < info->list_size; i++) {
		if (info->list[i].mtd)
			map_destroy(info->list[i].mtd);

		if (info->list[i].map.virt)
			iounmap(info->list[i].map.virt);

		if (info->list[i].res) {
			release_resource(info->list[i].res);
			kfree(info->list[i].res);
		}
	}
	return 0;
}
Exemplo n.º 3
0
static int physmap_flash_remove(struct platform_device *dev)
{
	struct physmap_flash_info *info;
	struct physmap_flash_data *physmap_data;
	int i;

	info = platform_get_drvdata(dev);
	if (info == NULL)
		return 0;
	platform_set_drvdata(dev, NULL);

	physmap_data = dev->dev.platform_data;

#ifdef CONFIG_MTD_CONCAT
	if (info->cmtd != info->mtd[0]) {
		del_mtd_device(info->cmtd);
		mtd_concat_destroy(info->cmtd);
	}
#endif

	for (i = 0; i < MAX_RESOURCES; i++) {
		if (info->mtd[i] != NULL) {
#ifdef CONFIG_MTD_PARTITIONS
			if (info->nr_parts) {
				del_mtd_partitions(info->mtd[i]);
				kfree(info->parts);
			} else if (physmap_data->nr_parts) {
				del_mtd_partitions(info->mtd[i]);
			} else {
				del_mtd_device(info->mtd[i]);
			}
#else
			del_mtd_device(info->mtd[i]);
#endif
			map_destroy(info->mtd[i]);
		}

		if (info->map[i].virt != NULL)
			iounmap(info->map[i].virt);
	}

	if (info->res != NULL) {
		release_resource(info->res);
		kfree(info->res);
	}

	return 0;
}
Exemplo n.º 4
0
static void __exit cleanup_dnpc(void)
{
	if(merged_mtd) {
		del_mtd_partitions(merged_mtd);
		mtd_concat_destroy(merged_mtd);
	}

	if (mymtd) {
		del_mtd_partitions(mymtd);
		map_destroy(mymtd);
	}
	if (dnpc_map.virt) {
		iounmap(dnpc_map.virt);
		dnpc_unmap_flash();
		dnpc_map.virt = NULL;
	}
}
Exemplo n.º 5
0
static void __exit cleanup_ppmc280(void) 
{ 
    int i; 
    if (chunk) { 
        del_mtd_device(chunk); 
        mtd_concat_destroy(chunk); 
    } 
 
    for (i = 0; i < NUM_FLASH_BANKS; i++) { 
        if (flash[i]) 
            map_destroy(flash[i]); 

        if (ppmc280_map[i].virt) { 
            iounmap((void *)ppmc280_map[i].virt); 
            ppmc280_map[i].virt = 0; 
        } 
    } 
} 
Exemplo n.º 6
0
static int of_flash_remove(struct platform_device *dev)
{
	struct of_flash *info;
	int i;

	info = dev_get_drvdata(&dev->dev);
	if (!info)
		return 0;
	dev_set_drvdata(&dev->dev, NULL);

#ifdef CONFIG_MTD_CONCAT
	if (info->cmtd != info->list[0].mtd) {
		del_mtd_device(info->cmtd);
		mtd_concat_destroy(info->cmtd);
	}
#endif

	if (info->cmtd) {
		if (OF_FLASH_PARTS(info)) {
			del_mtd_partitions(info->cmtd);
			kfree(OF_FLASH_PARTS(info));
		} else {
			del_mtd_device(info->cmtd);
		}
	}

	for (i = 0; i < info->list_size; i++) {
		if (info->list[i].mtd)
			map_destroy(info->list[i].mtd);

		if (info->list[i].map.virt)
			iounmap(info->list[i].map.virt);

		if (info->list[i].res) {
			release_resource(info->list[i].res);
			kfree(info->list[i].res);
		}
	}

	kfree(info);

	return 0;
}
Exemplo n.º 7
0
static void __exit cleanup_sc520cdp(void)
{
    int i;

    if (merged_mtd) {
        del_mtd_device(merged_mtd);
        mtd_concat_destroy(merged_mtd);
    }
    if (mymtd[2])
        del_mtd_device(mymtd[2]);

    for (i = 0; i < NUM_FLASH_BANKS; i++) {
        if (mymtd[i])
            map_destroy(mymtd[i]);
        if (sc520cdp_map[i].virt) {
            iounmap((void *)sc520cdp_map[i].virt);
            sc520cdp_map[i].virt = 0;
        }
    }
}
Exemplo n.º 8
0
static void __exit cleanup_sc520cdp(void)
{
	int i;

	if (merged_mtd) {
		mtd_device_unregister(merged_mtd);
		mtd_concat_destroy(merged_mtd);
	}
	if (mymtd[2])
		mtd_device_unregister(mymtd[2]);

	for (i = 0; i < NUM_FLASH_BANKS; i++) {
		if (mymtd[i])
			map_destroy(mymtd[i]);
		if (sc520cdp_map[i].virt) {
			iounmap(sc520cdp_map[i].virt);
			sc520cdp_map[i].virt = NULL;
		}
	}
}
Exemplo n.º 9
0
static int physmap_flash_remove(struct platform_device *dev)
{
	struct physmap_flash_info *info;
	struct physmap_flash_data *physmap_data;
	int i;

	info = platform_get_drvdata(dev);
	if (info == NULL)
		return 0;
	platform_set_drvdata(dev, NULL);

	physmap_data = dev->dev.platform_data;

	if (info->cmtd) {
#ifdef CONFIG_MTD_PARTITIONS
		if (info->nr_parts || physmap_data->nr_parts)
			del_mtd_partitions(info->cmtd);
		else
			del_mtd_device(info->cmtd);
#else
		del_mtd_device(info->cmtd);
#endif
	}
#ifdef CONFIG_MTD_PARTITIONS
	if (info->nr_parts)
		kfree(info->parts);
#endif

#ifdef CONFIG_MTD_CONCAT
	if (info->cmtd != info->mtd[0])
		mtd_concat_destroy(info->cmtd);
#endif

	for (i = 0; i < MAX_RESOURCES; i++) {
		if (info->mtd[i] != NULL)
			map_destroy(info->mtd[i]);
	}
	return 0;
}