Re: How to use spi device from another kernel module?
On Wed, Dec 7, 2016 at 7:26 PM, Ran Shalitwrote: > On Wed, Dec 7, 2016 at 6:58 PM, Joel Fernandes wrote: >> On Tue, Dec 6, 2016 at 11:02 PM, Greg KH wrote: >>> On Tue, Dec 06, 2016 at 09:12:24PM -0800, Joel Fernandes wrote: On Tue, Dec 6, 2016 at 11:42 AM, Ran Shalit wrote: > Hello, > > I have spi device which is registered using spi_register_board_info(), > and I would like to get a pointer to this device in some other kernel > module. > > Is there a simple way to get a pointer to pointer to a device , so > that we can use it from other module ? (something like i2c_get_adapter > for i2c) Find out what's the SPI bus number (for the master) and the chip select on that SPI master (for the SPI device) Then you can use bus_for_each_device on spi_bus_type and find the spi_device you're looking for. See the following code for an example of how to use bus_for_each_device: Hi, I did try using this method with the following call: bus_for_each_dev(_bus_type, NULL, NULL, spi_device_found); static int spi_device_found(struct device *dev, void *data) { struct spi_device *spi = container_of(dev, struct spi_device, dev); printk(": %s %s %dkHz %d bits mode=0x%02X\n", spi->modalias, dev_name(dev), spi->max_speed_hz/1000, spi->bits_per_word, spi->mode); return 0; } But for some reason the list is empty, although I do have devices registered successfuly with spi_register_driver. Using the same method with i2c works well, not sure why it doesn't list anything with spi. Thanks, Ran http://lxr.free-electrons.com/source/drivers/spi/spi.c#L524 In your check function, just make sure your spi->master->bus_num is the bus you want and the spi->chip_select is the chip select corresponding to the device you want. If both these conditions are satisfied, there you have your spi_device. >>> >>> Eeek, no, please never do that, use the proper spi apis to get your >>> needed device. They are there somewhere, using a "raw" >>> bus_for_each_device is never the answer unless you are a bus and >>> iterating over your own device list. >> >> Yes I completely agree, maybe I assumed too much and thought he was >> trying to do this for some quick debugging from some kernel module, >> and was just looking for a quick and dirty way to get to a spi_device. >> Was not really suggesting this for production code. :) >> > > You were actually Right... That's exactly what I wanted :) , so I > probably will try to use your simple method. > I think that for production , spidev shows a good example how to use > spi as a char device: > https://github.com/Xilinx/linux-xlnx/blob/master/drivers/spi/spidev.c > > Thanks! > Ran > >> Regards, >> Joel >> >>> >>> thanks, >>> >>> greg k-h ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: How to use spi device from another kernel module?
On Wed, Dec 7, 2016 at 6:58 PM, Joel Fernandeswrote: > On Tue, Dec 6, 2016 at 11:02 PM, Greg KH wrote: >> On Tue, Dec 06, 2016 at 09:12:24PM -0800, Joel Fernandes wrote: >>> On Tue, Dec 6, 2016 at 11:42 AM, Ran Shalit wrote: >>> > Hello, >>> > >>> > I have spi device which is registered using spi_register_board_info(), >>> > and I would like to get a pointer to this device in some other kernel >>> > module. >>> > >>> > Is there a simple way to get a pointer to pointer to a device , so >>> > that we can use it from other module ? (something like i2c_get_adapter >>> > for i2c) >>> >>> Find out what's the SPI bus number (for the master) and the chip >>> select on that SPI master (for the SPI device) >>> >>> Then you can use bus_for_each_device on spi_bus_type and find the >>> spi_device you're looking for. See the following code for an example >>> of how to use bus_for_each_device: >>> >>> http://lxr.free-electrons.com/source/drivers/spi/spi.c#L524 >>> >>> In your check function, just make sure your spi->master->bus_num is >>> the bus you want and the spi->chip_select is the chip select >>> corresponding to the device you want. If both these conditions are >>> satisfied, there you have your spi_device. >> >> Eeek, no, please never do that, use the proper spi apis to get your >> needed device. They are there somewhere, using a "raw" >> bus_for_each_device is never the answer unless you are a bus and >> iterating over your own device list. > > Yes I completely agree, maybe I assumed too much and thought he was > trying to do this for some quick debugging from some kernel module, > and was just looking for a quick and dirty way to get to a spi_device. > Was not really suggesting this for production code. :) > You were actually Right... That's exactly what I wanted :) , so I probably will try to use your simple method. I think that for production , spidev shows a good example how to use spi as a char device: https://github.com/Xilinx/linux-xlnx/blob/master/drivers/spi/spidev.c Thanks! Ran > Regards, > Joel > >> >> thanks, >> >> greg k-h ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: How to use spi device from another kernel module?
On Wed, Dec 7, 2016 at 9:02 AM, Greg KHwrote: > On Tue, Dec 06, 2016 at 09:12:24PM -0800, Joel Fernandes wrote: >> On Tue, Dec 6, 2016 at 11:42 AM, Ran Shalit wrote: >> > Hello, >> > >> > I have spi device which is registered using spi_register_board_info(), >> > and I would like to get a pointer to this device in some other kernel >> > module. >> > >> > Is there a simple way to get a pointer to pointer to a device , so >> > that we can use it from other module ? (something like i2c_get_adapter >> > for i2c) >> >> Find out what's the SPI bus number (for the master) and the chip >> select on that SPI master (for the SPI device) >> >> Then you can use bus_for_each_device on spi_bus_type and find the >> spi_device you're looking for. See the following code for an example >> of how to use bus_for_each_device: >> >> http://lxr.free-electrons.com/source/drivers/spi/spi.c#L524 >> Thanks Joel, Though in this example I can't see how to used bus number & cs. Probably I ask for something which is not too proper, as Greg mentioned. Yet, I need to do that, as simple as possible... >> In your check function, just make sure your spi->master->bus_num is >> the bus you want and the spi->chip_select is the chip select >> corresponding to the device you want. If both these conditions are >> satisfied, there you have your spi_device. > > Eeek, no, please never do that, use the proper spi apis to get your > needed device. They are there somewhere, using a "raw" > bus_for_each_device is never the answer unless you are a bus and > iterating over your own device list. > > thanks, > > greg k-h Hi, I'm trying to understand how to get the spi device from proc entry. Is there any example which demonstrate such usage ? Thanks, Ran ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
bifs mount error
Hi All, My appdata partition could not be mounted or where the partition was not able to be used. Anyone can help me to find out the root cause of this. What are the possibilities of this ubifs corruption. Any patched are available to fix this issue. Error logs: [1.797141] UBI error: ubi_io_read: error -74 (ECC error) while reading 253952 bytes from PEB 445:8192, read 253952 bytes [1.808274] UBIFS error (pid 491): ubifs_scan: corrupt empty space at LEB 489:233760 [1.816037] UBIFS error (pid 491): ubifs_scanned_corruption: corruption at LEB 489:233760 [1.828660] UBIFS error (pid 491): ubifs_scan: LEB 489 scanning failed [1.835215] UBIFS warning (pid 491): ubifs_ro_mode: switched to read-only mode, error -117 [1.843502] UBIFS error (pid 491): make_reservation: cannot reserve 58 bytes in jhead 2, error -117 [1.852569] UBIFS error (pid 491): do_writepage: cannot write page 0 of inode 76584, error -117 dpkg: error: unable to sync new file '/var/lib/dpkg/arch-new': Structure needs cleaning Best regards Raghavan Anurag RBEI/ETW1 Tel. +91(422)667-4001 | Mobil 9986968950 ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies